{
  "contractName": "WitnetDeployerDeferred",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initCode",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "internalType": "address",
          "name": "_deployed",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initCode",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "determineAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "determineProxyAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proxySalt",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_firstImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "proxify",
      "outputs": [
        {
          "internalType": "contract WitnetProxy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_deployed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineProxyAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proxySalt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_firstImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"proxify\",\"outputs\":[{\"internalType\":\"contract WitnetProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz <guillermo@witnet.io>\",\"details\":\"To be used on EVM chains where contract deployment takes place in a deferred way: - after the deployment tx gets mined, and not while it gets executed.\",\"kind\":\"dev\",\"methods\":{\"deploy(bytes,bytes32)\":{\"details\":\"The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). \",\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_deployed\":\"Just deployed contract address.\"}},\"determineAddr(bytes,bytes32)\":{\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_0\":\"Deterministic contract address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deploy(bytes,bytes32)\":{\"notice\":\"Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \"},\"determineAddr(bytes,bytes32)\":{\"notice\":\"Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\"}},\"notice\":\"WitnetDeployerNoChecks contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, and CREATE3 (EIP-3171) factory for Witnet proxies. \",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetDeployerDeferred.sol\":\"WitnetDeployerDeferred\"},\"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/WitnetDeployerDeferred.sol\":{\"keccak256\":\"0xa9bd1815241e770fed3c60ee5e3829fc6653257958fc190ffd7180c52a0acda8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e5d93d9840b9bf592be2308319c3bd06116350bbaeed382bf2d17fa5004624\",\"dweb:/ipfs/QmbJ3Y76LB46upNzCCi6bCow4DtUjSBTekSaWbqhbeEi1s\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x6f0ec2c544192c9439bde88f5ed4efec5bdef506cb0dcb739c29329a798033fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ca05338334632aab3aef3c17a4b8686251ec488da49b9fcd3712642e57e0ce2a\",\"dweb:/ipfs/QmZk1uDdytKFii4TXUnJkFBBB3CZVSPKKR85ugFjWUTufS\"]},\"project:/contracts/libs/Create3.sol\":{\"keccak256\":\"0xfbda4c773f859bef9d7878ca9412f244da85f7bd49df07c49a17544f4708d718\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://0f83b72ad1c35c707cc6daa4e8266d9d711f561a188fbb0be1885d3f08146ca6\",\"dweb:/ipfs/QmPJwdieqkxoSvqmczAtRMfb5EN8uWiabqMKj4yVqsUncv\"]},\"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": "0x6080604052348015600e575f5ffd5b506110ed8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80634998f0381461004e5780634af63f021461007d5780635ba489e714610090578063d3933c29146100a3575b5f5ffd5b61006161005c366004610535565b6100b6565b6040516001600160a01b03909116815260200160405180910390f35b61006161008b3660046105eb565b6100c6565b61006161009e36600461062d565b6100f4565b6100616100b13660046105eb565b61023c565b5f6100c082610298565b92915050565b5f6100d1838361023c565b9050806001600160a01b03163b5f036100c057818351602085015ff59392505050565b5f5f6100ff856100b6565b9050806001600160a01b03163b5f036101d65761013e856040518060200161012690610528565b601f1982820381018352601f9091011660405261036b565b50806001600160a01b0316636fbc15e985338660405160200161016292919061068d565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161018e92919061068d565b6020604051808303815f875af11580156101aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ce91906106d1565b509050610235565b60405162461bcd60e51b815260206004820152602960248201527f5769746e65744465706c6f79657244656665727265643a20616c7265616479206044820152681c1c9bde1a599a595960ba1b60648201526084015b60405180910390fd5b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b604080518082018252601081526f67363d3d37363d34f03d5260086018f360801b60209182015281516001600160f81b03198183015230606090811b6bffffffffffffffffffffffff19908116602184015260358301959095527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f605580840191909152845180840390910181526075830185528051908401206135a560f21b6095840152901b9093166097840152600160f81b60ab8401528151608c81850301815260ac909301909152815191012090565b5f61023583835f5f61037c84610298565b90506001600160a01b0381163b156103d65760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a2074617267657420616c7265616479206578697374730000604482015260640161022c565b6040805180820190915260108082526f67363d3d37363d34f03d5260086018f360801b602083019081525f9291879184f591506001600160a01b03821661045f5760405162461bcd60e51b815260206004820152601f60248201527f437265617465333a206572726f72206372656174696e6720666163746f727900604482015260640161022c565b5f826001600160a01b0316858760405161047991906106f0565b5f6040518083038185875af1925050503d805f81146104b3576040519150601f19603f3d011682016040523d82523d5f602084013e6104b8565b606091505b505090508080156104d257506001600160a01b0384163b15155b61051e5760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a206572726f72206372656174696e67207461726765740000604482015260640161022c565b5050509392505050565b6109b18061070783390190565b5f60208284031215610545575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261056f575f5ffd5b813567ffffffffffffffff8111156105895761058961054c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156105b8576105b861054c565b6040528181528382016020018510156105cf575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156105fc575f5ffd5b823567ffffffffffffffff811115610612575f5ffd5b61061e85828601610560565b95602094909401359450505050565b5f5f5f6060848603121561063f575f5ffd5b8335925060208401356001600160a01b038116811461065c575f5ffd5b9150604084013567ffffffffffffffff811115610677575f5ffd5b61068386828701610560565b9150509250925092565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f602082840312156106e1575f5ffd5b81518015158114610235575f5ffd5b5f82518060208501845e5f92019182525091905056fe6080604052348015600e575f5ffd5b506109958061001c5f395ff3fe60806040526004361061002c575f3560e01c80635c60da1b146100605780636fbc15e91461009157610033565b3661003357005b5f61003c6100c0565b9050604051365f82375f5f3683855af43d805f843e81801561005c578184f35b8184fd5b34801561006b575f5ffd5b506100746100c0565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab366004610778565b6100ee565b6040519015158152602001610088565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b5f6001600160a01b03831661014a5760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b5f6101536100c0565b90506001600160a01b038116156104f757806001600160a01b0316846001600160a01b0316036101c55760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610141565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561021f575060408051601f3d908101601f1916820190925261021c91810190610810565b60015b61027e5760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610141565b806102cb5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610141565b506040513360248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b1790525161031c9190610836565b5f60405180830381855af49150503d805f8114610354576040519150601f19603f3d011682016040523d82523d5f602084013e610359565b606091505b50915091508161037b5760405162461bcd60e51b81526004016101419061084c565b8080602001905181019061038f9190610810565b6103db5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610141565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610417573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043b9190610893565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049b9190610893565b146104f45760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610141565b50505b5f5f856001600160a01b03168560405160240161051491906108d8565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b179052516105499190610836565b5f60405180830381855af49150503d805f8114610581576040519150601f19603f3d011682016040523d82523d5f602084013e610586565b606091505b509150915081610620576044815110156105ed5760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610141565b6004810190508080602001905181019061060791906108ea565b60405162461bcd60e51b815260040161014191906108d8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106df575060408051601f3d908101601f191682019092526106dc91810190610810565b60015b6106fb5760405162461bcd60e51b81526004016101419061084c565b935061070692505050565b92915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156107495761074961070c565b604052919050565b5f67ffffffffffffffff82111561076a5761076a61070c565b50601f01601f191660200190565b5f5f60408385031215610789575f5ffd5b82356001600160a01b038116811461079f575f5ffd5b9150602083013567ffffffffffffffff8111156107ba575f5ffd5b8301601f810185136107ca575f5ffd5b80356107dd6107d882610751565b610720565b8181528660208385010111156107f1575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215610820575f5ffd5b8151801515811461082f575f5ffd5b9392505050565b5f82518060208501845e5f920191825250919050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b5f602082840312156108a3575f5ffd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61082f60208301846108aa565b5f602082840312156108fa575f5ffd5b815167ffffffffffffffff811115610910575f5ffd5b8201601f81018413610920575f5ffd5b805161092e6107d882610751565b818152856020838501011115610942575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220a8415d02311c8820d22429929d1fce9f26d5e64d00552717dedf051fcf03fde664736f6c634300081e0033a26469706673582212203db8edbce82d5f50d09e9cba8592a265bfc4069583817f309527436a7068839864736f6c634300081e0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80634998f0381461004e5780634af63f021461007d5780635ba489e714610090578063d3933c29146100a3575b5f5ffd5b61006161005c366004610535565b6100b6565b6040516001600160a01b03909116815260200160405180910390f35b61006161008b3660046105eb565b6100c6565b61006161009e36600461062d565b6100f4565b6100616100b13660046105eb565b61023c565b5f6100c082610298565b92915050565b5f6100d1838361023c565b9050806001600160a01b03163b5f036100c057818351602085015ff59392505050565b5f5f6100ff856100b6565b9050806001600160a01b03163b5f036101d65761013e856040518060200161012690610528565b601f1982820381018352601f9091011660405261036b565b50806001600160a01b0316636fbc15e985338660405160200161016292919061068d565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161018e92919061068d565b6020604051808303815f875af11580156101aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ce91906106d1565b509050610235565b60405162461bcd60e51b815260206004820152602960248201527f5769746e65744465706c6f79657244656665727265643a20616c7265616479206044820152681c1c9bde1a599a595960ba1b60648201526084015b60405180910390fd5b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b604080518082018252601081526f67363d3d37363d34f03d5260086018f360801b60209182015281516001600160f81b03198183015230606090811b6bffffffffffffffffffffffff19908116602184015260358301959095527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f605580840191909152845180840390910181526075830185528051908401206135a560f21b6095840152901b9093166097840152600160f81b60ab8401528151608c81850301815260ac909301909152815191012090565b5f61023583835f5f61037c84610298565b90506001600160a01b0381163b156103d65760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a2074617267657420616c7265616479206578697374730000604482015260640161022c565b6040805180820190915260108082526f67363d3d37363d34f03d5260086018f360801b602083019081525f9291879184f591506001600160a01b03821661045f5760405162461bcd60e51b815260206004820152601f60248201527f437265617465333a206572726f72206372656174696e6720666163746f727900604482015260640161022c565b5f826001600160a01b0316858760405161047991906106f0565b5f6040518083038185875af1925050503d805f81146104b3576040519150601f19603f3d011682016040523d82523d5f602084013e6104b8565b606091505b505090508080156104d257506001600160a01b0384163b15155b61051e5760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a206572726f72206372656174696e67207461726765740000604482015260640161022c565b5050509392505050565b6109b18061070783390190565b5f60208284031215610545575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261056f575f5ffd5b813567ffffffffffffffff8111156105895761058961054c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156105b8576105b861054c565b6040528181528382016020018510156105cf575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f604083850312156105fc575f5ffd5b823567ffffffffffffffff811115610612575f5ffd5b61061e85828601610560565b95602094909401359450505050565b5f5f5f6060848603121561063f575f5ffd5b8335925060208401356001600160a01b038116811461065c575f5ffd5b9150604084013567ffffffffffffffff811115610677575f5ffd5b61068386828701610560565b9150509250925092565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f602082840312156106e1575f5ffd5b81518015158114610235575f5ffd5b5f82518060208501845e5f92019182525091905056fe6080604052348015600e575f5ffd5b506109958061001c5f395ff3fe60806040526004361061002c575f3560e01c80635c60da1b146100605780636fbc15e91461009157610033565b3661003357005b5f61003c6100c0565b9050604051365f82375f5f3683855af43d805f843e81801561005c578184f35b8184fd5b34801561006b575f5ffd5b506100746100c0565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab366004610778565b6100ee565b6040519015158152602001610088565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b5f6001600160a01b03831661014a5760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b5f6101536100c0565b90506001600160a01b038116156104f757806001600160a01b0316846001600160a01b0316036101c55760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610141565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561021f575060408051601f3d908101601f1916820190925261021c91810190610810565b60015b61027e5760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610141565b806102cb5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610141565b506040513360248201525f9081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b1790525161031c9190610836565b5f60405180830381855af49150503d805f8114610354576040519150601f19603f3d011682016040523d82523d5f602084013e610359565b606091505b50915091508161037b5760405162461bcd60e51b81526004016101419061084c565b8080602001905181019061038f9190610810565b6103db5760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610141565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610417573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043b9190610893565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049b9190610893565b146104f45760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610141565b50505b5f5f856001600160a01b03168560405160240161051491906108d8565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b179052516105499190610836565b5f60405180830381855af49150503d805f8114610581576040519150601f19603f3d011682016040523d82523d5f602084013e610586565b606091505b509150915081610620576044815110156105ed5760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610141565b6004810190508080602001905181019061060791906108ea565b60405162461bcd60e51b815260040161014191906108d8565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106df575060408051601f3d908101601f191682019092526106dc91810190610810565b60015b6106fb5760405162461bcd60e51b81526004016101419061084c565b935061070692505050565b92915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156107495761074961070c565b604052919050565b5f67ffffffffffffffff82111561076a5761076a61070c565b50601f01601f191660200190565b5f5f60408385031215610789575f5ffd5b82356001600160a01b038116811461079f575f5ffd5b9150602083013567ffffffffffffffff8111156107ba575f5ffd5b8301601f810185136107ca575f5ffd5b80356107dd6107d882610751565b610720565b8181528660208385010111156107f1575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215610820575f5ffd5b8151801515811461082f575f5ffd5b9392505050565b5f82518060208501845e5f920191825250919050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b5f602082840312156108a3575f5ffd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61082f60208301846108aa565b5f602082840312156108fa575f5ffd5b815167ffffffffffffffff811115610910575f5ffd5b8201601f81018413610920575f5ffd5b805161092e6107d882610751565b818152856020838501011115610942575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220a8415d02311c8820d22429929d1fce9f26d5e64d00552717dedf051fcf03fde664736f6c634300081e0033a26469706673582212203db8edbce82d5f50d09e9cba8592a265bfc4069583817f309527436a7068839864736f6c634300081e0033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nativeSrc": "0:6679:136",
        "nodeType": "YulBlock",
        "src": "0:6679:136",
        "statements": [
          {
            "nativeSrc": "6:3:136",
            "nodeType": "YulBlock",
            "src": "6:3:136",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "84:156:136",
              "nodeType": "YulBlock",
              "src": "84:156:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "130:16:136",
                    "nodeType": "YulBlock",
                    "src": "130:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "139:1:136",
                              "nodeType": "YulLiteral",
                              "src": "139:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "142:1:136",
                              "nodeType": "YulLiteral",
                              "src": "142:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "132:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:136"
                          },
                          "nativeSrc": "132:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:136"
                        },
                        "nativeSrc": "132:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "105:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "114:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "101:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:136"
                        },
                        "nativeSrc": "101:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "126:2:136",
                        "nodeType": "YulLiteral",
                        "src": "126:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "97:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:136"
                    },
                    "nativeSrc": "97:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:136"
                  },
                  "nativeSrc": "94:52:136",
                  "nodeType": "YulIf",
                  "src": "94:52:136"
                },
                {
                  "nativeSrc": "155:14:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "155:14:136",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "168:1:136",
                    "nodeType": "YulLiteral",
                    "src": "168:1:136",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "159:5:136",
                      "nodeType": "YulTypedName",
                      "src": "159:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "178:32:136",
                  "nodeType": "YulAssignment",
                  "src": "178:32:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "200:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "200:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "187:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "187:12:136"
                    },
                    "nativeSrc": "187:23:136",
                    "nodeType": "YulFunctionCall",
                    "src": "187:23:136"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "178:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "178:5:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "219:15:136",
                  "nodeType": "YulAssignment",
                  "src": "219:15:136",
                  "value": {
                    "name": "value",
                    "nativeSrc": "229:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "229:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "219:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "219:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nativeSrc": "14:226:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "50:9:136",
                "nodeType": "YulTypedName",
                "src": "50:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "61:7:136",
                "nodeType": "YulTypedName",
                "src": "61:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "73:6:136",
                "nodeType": "YulTypedName",
                "src": "73:6:136",
                "type": ""
              }
            ],
            "src": "14:226:136"
          },
          {
            "body": {
              "nativeSrc": "346:102:136",
              "nodeType": "YulBlock",
              "src": "346:102:136",
              "statements": [
                {
                  "nativeSrc": "356:26:136",
                  "nodeType": "YulAssignment",
                  "src": "356:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "368:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "368:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "379:2:136",
                        "nodeType": "YulLiteral",
                        "src": "379:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "364:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "364:3:136"
                    },
                    "nativeSrc": "364:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "364:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "356:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "356:4:136"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "398:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "398:9:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "413:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "413:6:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "429:3:136",
                                    "nodeType": "YulLiteral",
                                    "src": "429:3:136",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "434:1:136",
                                    "nodeType": "YulLiteral",
                                    "src": "434:1:136",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "425:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "425:3:136"
                                },
                                "nativeSrc": "425:11:136",
                                "nodeType": "YulFunctionCall",
                                "src": "425:11:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "438:1:136",
                                "nodeType": "YulLiteral",
                                "src": "438:1:136",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "421:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "421:3:136"
                            },
                            "nativeSrc": "421:19:136",
                            "nodeType": "YulFunctionCall",
                            "src": "421:19:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "409:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "409:3:136"
                        },
                        "nativeSrc": "409:32:136",
                        "nodeType": "YulFunctionCall",
                        "src": "409:32:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "391:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "391:6:136"
                    },
                    "nativeSrc": "391:51:136",
                    "nodeType": "YulFunctionCall",
                    "src": "391:51:136"
                  },
                  "nativeSrc": "391:51:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "391:51:136"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nativeSrc": "245:203:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "315:9:136",
                "nodeType": "YulTypedName",
                "src": "315:9:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "326:6:136",
                "nodeType": "YulTypedName",
                "src": "326:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "337:4:136",
                "nodeType": "YulTypedName",
                "src": "337:4:136",
                "type": ""
              }
            ],
            "src": "245:203:136"
          },
          {
            "body": {
              "nativeSrc": "485:95:136",
              "nodeType": "YulBlock",
              "src": "485:95:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "502:1:136",
                        "nodeType": "YulLiteral",
                        "src": "502:1:136",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "509:3:136",
                            "nodeType": "YulLiteral",
                            "src": "509:3:136",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "514:10:136",
                            "nodeType": "YulLiteral",
                            "src": "514:10:136",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "505:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "505:3:136"
                        },
                        "nativeSrc": "505:20:136",
                        "nodeType": "YulFunctionCall",
                        "src": "505:20:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "495:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "495:6:136"
                    },
                    "nativeSrc": "495:31:136",
                    "nodeType": "YulFunctionCall",
                    "src": "495:31:136"
                  },
                  "nativeSrc": "495:31:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "495:31:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "542:1:136",
                        "nodeType": "YulLiteral",
                        "src": "542:1:136",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "545:4:136",
                        "nodeType": "YulLiteral",
                        "src": "545:4:136",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "535:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "535:6:136"
                    },
                    "nativeSrc": "535:15:136",
                    "nodeType": "YulFunctionCall",
                    "src": "535:15:136"
                  },
                  "nativeSrc": "535:15:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "535:15:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "566:1:136",
                        "nodeType": "YulLiteral",
                        "src": "566:1:136",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "569:4:136",
                        "nodeType": "YulLiteral",
                        "src": "569:4:136",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "559:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "559:6:136"
                    },
                    "nativeSrc": "559:15:136",
                    "nodeType": "YulFunctionCall",
                    "src": "559:15:136"
                  },
                  "nativeSrc": "559:15:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "559:15:136"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nativeSrc": "453:127:136",
            "nodeType": "YulFunctionDefinition",
            "src": "453:127:136"
          },
          {
            "body": {
              "nativeSrc": "637:673:136",
              "nodeType": "YulBlock",
              "src": "637:673:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "686:16:136",
                    "nodeType": "YulBlock",
                    "src": "686:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "695:1:136",
                              "nodeType": "YulLiteral",
                              "src": "695:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "698:1:136",
                              "nodeType": "YulLiteral",
                              "src": "698:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "688:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "688:6:136"
                          },
                          "nativeSrc": "688:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "688:12:136"
                        },
                        "nativeSrc": "688:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "688:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nativeSrc": "665:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "665:6:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "673:4:136",
                                "nodeType": "YulLiteral",
                                "src": "673:4:136",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "661:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "661:3:136"
                            },
                            "nativeSrc": "661:17:136",
                            "nodeType": "YulFunctionCall",
                            "src": "661:17:136"
                          },
                          {
                            "name": "end",
                            "nativeSrc": "680:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "680:3:136"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "657:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "657:3:136"
                        },
                        "nativeSrc": "657:27:136",
                        "nodeType": "YulFunctionCall",
                        "src": "657:27:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "650:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "650:6:136"
                    },
                    "nativeSrc": "650:35:136",
                    "nodeType": "YulFunctionCall",
                    "src": "650:35:136"
                  },
                  "nativeSrc": "647:55:136",
                  "nodeType": "YulIf",
                  "src": "647:55:136"
                },
                {
                  "nativeSrc": "711:34:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "711:34:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "738:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "738:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "725:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "725:12:136"
                    },
                    "nativeSrc": "725:20:136",
                    "nodeType": "YulFunctionCall",
                    "src": "725:20:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "715:6:136",
                      "nodeType": "YulTypedName",
                      "src": "715:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "788:22:136",
                    "nodeType": "YulBlock",
                    "src": "788:22:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "790:16:136",
                            "nodeType": "YulIdentifier",
                            "src": "790:16:136"
                          },
                          "nativeSrc": "790:18:136",
                          "nodeType": "YulFunctionCall",
                          "src": "790:18:136"
                        },
                        "nativeSrc": "790:18:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "790:18:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nativeSrc": "760:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "760:6:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "768:18:136",
                        "nodeType": "YulLiteral",
                        "src": "768:18:136",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "757:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "757:2:136"
                    },
                    "nativeSrc": "757:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "757:30:136"
                  },
                  "nativeSrc": "754:56:136",
                  "nodeType": "YulIf",
                  "src": "754:56:136"
                },
                {
                  "nativeSrc": "819:23:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "819:23:136",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "839:2:136",
                        "nodeType": "YulLiteral",
                        "src": "839:2:136",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "833:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "833:5:136"
                    },
                    "nativeSrc": "833:9:136",
                    "nodeType": "YulFunctionCall",
                    "src": "833:9:136"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nativeSrc": "823:6:136",
                      "nodeType": "YulTypedName",
                      "src": "823:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "851:85:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "851:85:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "873:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "873:6:136"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nativeSrc": "897:6:136",
                                        "nodeType": "YulIdentifier",
                                        "src": "897:6:136"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "905:4:136",
                                        "nodeType": "YulLiteral",
                                        "src": "905:4:136",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "893:3:136",
                                      "nodeType": "YulIdentifier",
                                      "src": "893:3:136"
                                    },
                                    "nativeSrc": "893:17:136",
                                    "nodeType": "YulFunctionCall",
                                    "src": "893:17:136"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "916:2:136",
                                        "nodeType": "YulLiteral",
                                        "src": "916:2:136",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nativeSrc": "912:3:136",
                                      "nodeType": "YulIdentifier",
                                      "src": "912:3:136"
                                    },
                                    "nativeSrc": "912:7:136",
                                    "nodeType": "YulFunctionCall",
                                    "src": "912:7:136"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nativeSrc": "889:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "889:3:136"
                                },
                                "nativeSrc": "889:31:136",
                                "nodeType": "YulFunctionCall",
                                "src": "889:31:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "922:2:136",
                                "nodeType": "YulLiteral",
                                "src": "922:2:136",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "885:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "885:3:136"
                            },
                            "nativeSrc": "885:40:136",
                            "nodeType": "YulFunctionCall",
                            "src": "885:40:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "931:2:136",
                                "nodeType": "YulLiteral",
                                "src": "931:2:136",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "927:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "927:3:136"
                            },
                            "nativeSrc": "927:7:136",
                            "nodeType": "YulFunctionCall",
                            "src": "927:7:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "881:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "881:3:136"
                        },
                        "nativeSrc": "881:54:136",
                        "nodeType": "YulFunctionCall",
                        "src": "881:54:136"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "869:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "869:3:136"
                    },
                    "nativeSrc": "869:67:136",
                    "nodeType": "YulFunctionCall",
                    "src": "869:67:136"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nativeSrc": "855:10:136",
                      "nodeType": "YulTypedName",
                      "src": "855:10:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1011:22:136",
                    "nodeType": "YulBlock",
                    "src": "1011:22:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "1013:16:136",
                            "nodeType": "YulIdentifier",
                            "src": "1013:16:136"
                          },
                          "nativeSrc": "1013:18:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1013:18:136"
                        },
                        "nativeSrc": "1013:18:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1013:18:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "954:10:136",
                            "nodeType": "YulIdentifier",
                            "src": "954:10:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "966:18:136",
                            "nodeType": "YulLiteral",
                            "src": "966:18:136",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nativeSrc": "951:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "951:2:136"
                        },
                        "nativeSrc": "951:34:136",
                        "nodeType": "YulFunctionCall",
                        "src": "951:34:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "990:10:136",
                            "nodeType": "YulIdentifier",
                            "src": "990:10:136"
                          },
                          {
                            "name": "memPtr",
                            "nativeSrc": "1002:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1002:6:136"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "987:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "987:2:136"
                        },
                        "nativeSrc": "987:22:136",
                        "nodeType": "YulFunctionCall",
                        "src": "987:22:136"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nativeSrc": "948:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "948:2:136"
                    },
                    "nativeSrc": "948:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "948:62:136"
                  },
                  "nativeSrc": "945:88:136",
                  "nodeType": "YulIf",
                  "src": "945:88:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "1049:2:136",
                        "nodeType": "YulLiteral",
                        "src": "1049:2:136",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nativeSrc": "1053:10:136",
                        "nodeType": "YulIdentifier",
                        "src": "1053:10:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1042:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1042:6:136"
                    },
                    "nativeSrc": "1042:22:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1042:22:136"
                  },
                  "nativeSrc": "1042:22:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1042:22:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "1080:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1080:6:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "1088:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1088:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1073:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1073:6:136"
                    },
                    "nativeSrc": "1073:22:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1073:22:136"
                  },
                  "nativeSrc": "1073:22:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1073:22:136"
                },
                {
                  "body": {
                    "nativeSrc": "1147:16:136",
                    "nodeType": "YulBlock",
                    "src": "1147:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1156:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1156:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1159:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1159:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1149:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1149:6:136"
                          },
                          "nativeSrc": "1149:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1149:12:136"
                        },
                        "nativeSrc": "1149:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1149:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nativeSrc": "1118:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1118:6:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "1126:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1126:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1114:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "1114:3:136"
                            },
                            "nativeSrc": "1114:19:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1114:19:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1135:4:136",
                            "nodeType": "YulLiteral",
                            "src": "1135:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1110:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1110:3:136"
                        },
                        "nativeSrc": "1110:30:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1110:30:136"
                      },
                      {
                        "name": "end",
                        "nativeSrc": "1142:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "1142:3:136"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1107:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "1107:2:136"
                    },
                    "nativeSrc": "1107:39:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1107:39:136"
                  },
                  "nativeSrc": "1104:59:136",
                  "nodeType": "YulIf",
                  "src": "1104:59:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nativeSrc": "1189:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1189:6:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1197:4:136",
                            "nodeType": "YulLiteral",
                            "src": "1197:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1185:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1185:3:136"
                        },
                        "nativeSrc": "1185:17:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1185:17:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nativeSrc": "1208:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1208:6:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1216:4:136",
                            "nodeType": "YulLiteral",
                            "src": "1216:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1204:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1204:3:136"
                        },
                        "nativeSrc": "1204:17:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1204:17:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "1223:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1223:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nativeSrc": "1172:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1172:12:136"
                    },
                    "nativeSrc": "1172:58:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1172:58:136"
                  },
                  "nativeSrc": "1172:58:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1172:58:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nativeSrc": "1254:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1254:6:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "1262:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "1262:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1250:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "1250:3:136"
                            },
                            "nativeSrc": "1250:19:136",
                            "nodeType": "YulFunctionCall",
                            "src": "1250:19:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1271:4:136",
                            "nodeType": "YulLiteral",
                            "src": "1271:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1246:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1246:3:136"
                        },
                        "nativeSrc": "1246:30:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1246:30:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1278:1:136",
                        "nodeType": "YulLiteral",
                        "src": "1278:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1239:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1239:6:136"
                    },
                    "nativeSrc": "1239:41:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1239:41:136"
                  },
                  "nativeSrc": "1239:41:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "1239:41:136"
                },
                {
                  "nativeSrc": "1289:15:136",
                  "nodeType": "YulAssignment",
                  "src": "1289:15:136",
                  "value": {
                    "name": "memPtr",
                    "nativeSrc": "1298:6:136",
                    "nodeType": "YulIdentifier",
                    "src": "1298:6:136"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nativeSrc": "1289:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "1289:5:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes",
            "nativeSrc": "585:725:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nativeSrc": "611:6:136",
                "nodeType": "YulTypedName",
                "src": "611:6:136",
                "type": ""
              },
              {
                "name": "end",
                "nativeSrc": "619:3:136",
                "nodeType": "YulTypedName",
                "src": "619:3:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nativeSrc": "627:5:136",
                "nodeType": "YulTypedName",
                "src": "627:5:136",
                "type": ""
              }
            ],
            "src": "585:725:136"
          },
          {
            "body": {
              "nativeSrc": "1411:338:136",
              "nodeType": "YulBlock",
              "src": "1411:338:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1457:16:136",
                    "nodeType": "YulBlock",
                    "src": "1457:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1466:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1466:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1469:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1469:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1459:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1459:6:136"
                          },
                          "nativeSrc": "1459:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1459:12:136"
                        },
                        "nativeSrc": "1459:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1459:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1432:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "1432:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1441:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "1441:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1428:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1428:3:136"
                        },
                        "nativeSrc": "1428:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1428:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1453:2:136",
                        "nodeType": "YulLiteral",
                        "src": "1453:2:136",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1424:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "1424:3:136"
                    },
                    "nativeSrc": "1424:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1424:32:136"
                  },
                  "nativeSrc": "1421:52:136",
                  "nodeType": "YulIf",
                  "src": "1421:52:136"
                },
                {
                  "nativeSrc": "1482:37:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1482:37:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1509:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "1509:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1496:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1496:12:136"
                    },
                    "nativeSrc": "1496:23:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1496:23:136"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "1486:6:136",
                      "nodeType": "YulTypedName",
                      "src": "1486:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1562:16:136",
                    "nodeType": "YulBlock",
                    "src": "1562:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1571:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1571:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1574:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1574:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1564:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1564:6:136"
                          },
                          "nativeSrc": "1564:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1564:12:136"
                        },
                        "nativeSrc": "1564:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1564:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "1534:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "1534:6:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1542:18:136",
                        "nodeType": "YulLiteral",
                        "src": "1542:18:136",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1531:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "1531:2:136"
                    },
                    "nativeSrc": "1531:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1531:30:136"
                  },
                  "nativeSrc": "1528:50:136",
                  "nodeType": "YulIf",
                  "src": "1528:50:136"
                },
                {
                  "nativeSrc": "1587:59:136",
                  "nodeType": "YulAssignment",
                  "src": "1587:59:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1618:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "1618:9:136"
                          },
                          {
                            "name": "offset",
                            "nativeSrc": "1629:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1629:6:136"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1614:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1614:3:136"
                        },
                        "nativeSrc": "1614:22:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1614:22:136"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "1638:7:136",
                        "nodeType": "YulIdentifier",
                        "src": "1638:7:136"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nativeSrc": "1597:16:136",
                      "nodeType": "YulIdentifier",
                      "src": "1597:16:136"
                    },
                    "nativeSrc": "1597:49:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1597:49:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1587:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1587:6:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "1655:14:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1655:14:136",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "1668:1:136",
                    "nodeType": "YulLiteral",
                    "src": "1668:1:136",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "1659:5:136",
                      "nodeType": "YulTypedName",
                      "src": "1659:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "1678:41:136",
                  "nodeType": "YulAssignment",
                  "src": "1678:41:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1704:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "1704:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1715:2:136",
                            "nodeType": "YulLiteral",
                            "src": "1715:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1700:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1700:3:136"
                        },
                        "nativeSrc": "1700:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1700:18:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1687:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1687:12:136"
                    },
                    "nativeSrc": "1687:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1687:32:136"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "1678:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "1678:5:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "1728:15:136",
                  "nodeType": "YulAssignment",
                  "src": "1728:15:136",
                  "value": {
                    "name": "value",
                    "nativeSrc": "1738:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "1738:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1728:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "1728:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes32",
            "nativeSrc": "1315:434:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1369:9:136",
                "nodeType": "YulTypedName",
                "src": "1369:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1380:7:136",
                "nodeType": "YulTypedName",
                "src": "1380:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1392:6:136",
                "nodeType": "YulTypedName",
                "src": "1392:6:136",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1400:6:136",
                "nodeType": "YulTypedName",
                "src": "1400:6:136",
                "type": ""
              }
            ],
            "src": "1315:434:136"
          },
          {
            "body": {
              "nativeSrc": "1867:503:136",
              "nodeType": "YulBlock",
              "src": "1867:503:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1913:16:136",
                    "nodeType": "YulBlock",
                    "src": "1913:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1922:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1922:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1925:1:136",
                              "nodeType": "YulLiteral",
                              "src": "1925:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1915:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "1915:6:136"
                          },
                          "nativeSrc": "1915:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "1915:12:136"
                        },
                        "nativeSrc": "1915:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "1915:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1888:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "1888:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1897:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "1897:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1884:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "1884:3:136"
                        },
                        "nativeSrc": "1884:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "1884:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1909:2:136",
                        "nodeType": "YulLiteral",
                        "src": "1909:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1880:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "1880:3:136"
                    },
                    "nativeSrc": "1880:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1880:32:136"
                  },
                  "nativeSrc": "1877:52:136",
                  "nodeType": "YulIf",
                  "src": "1877:52:136"
                },
                {
                  "nativeSrc": "1938:14:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1938:14:136",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "1951:1:136",
                    "nodeType": "YulLiteral",
                    "src": "1951:1:136",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "1942:5:136",
                      "nodeType": "YulTypedName",
                      "src": "1942:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "1961:32:136",
                  "nodeType": "YulAssignment",
                  "src": "1961:32:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1983:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "1983:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1970:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "1970:12:136"
                    },
                    "nativeSrc": "1970:23:136",
                    "nodeType": "YulFunctionCall",
                    "src": "1970:23:136"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nativeSrc": "1961:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "1961:5:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "2002:15:136",
                  "nodeType": "YulAssignment",
                  "src": "2002:15:136",
                  "value": {
                    "name": "value",
                    "nativeSrc": "2012:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "2012:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "2002:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2002:6:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "2026:47:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2026:47:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2058:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2058:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2069:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2069:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2054:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2054:3:136"
                        },
                        "nativeSrc": "2054:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2054:18:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2041:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "2041:12:136"
                    },
                    "nativeSrc": "2041:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2041:32:136"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nativeSrc": "2030:7:136",
                      "nodeType": "YulTypedName",
                      "src": "2030:7:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2140:16:136",
                    "nodeType": "YulBlock",
                    "src": "2140:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2149:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2149:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2152:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2152:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2142:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2142:6:136"
                          },
                          "nativeSrc": "2142:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "2142:12:136"
                        },
                        "nativeSrc": "2142:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "2142:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value_1",
                            "nativeSrc": "2095:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "2095:7:136"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value_1",
                                "nativeSrc": "2108:7:136",
                                "nodeType": "YulIdentifier",
                                "src": "2108:7:136"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "2125:3:136",
                                        "nodeType": "YulLiteral",
                                        "src": "2125:3:136",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "2130:1:136",
                                        "nodeType": "YulLiteral",
                                        "src": "2130:1:136",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "2121:3:136",
                                      "nodeType": "YulIdentifier",
                                      "src": "2121:3:136"
                                    },
                                    "nativeSrc": "2121:11:136",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2121:11:136"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2134:1:136",
                                    "nodeType": "YulLiteral",
                                    "src": "2134:1:136",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "2117:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "2117:3:136"
                                },
                                "nativeSrc": "2117:19:136",
                                "nodeType": "YulFunctionCall",
                                "src": "2117:19:136"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "2104:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "2104:3:136"
                            },
                            "nativeSrc": "2104:33:136",
                            "nodeType": "YulFunctionCall",
                            "src": "2104:33:136"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "2092:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "2092:2:136"
                        },
                        "nativeSrc": "2092:46:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2092:46:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "2085:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2085:6:136"
                    },
                    "nativeSrc": "2085:54:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2085:54:136"
                  },
                  "nativeSrc": "2082:74:136",
                  "nodeType": "YulIf",
                  "src": "2082:74:136"
                },
                {
                  "nativeSrc": "2165:17:136",
                  "nodeType": "YulAssignment",
                  "src": "2165:17:136",
                  "value": {
                    "name": "value_1",
                    "nativeSrc": "2175:7:136",
                    "nodeType": "YulIdentifier",
                    "src": "2175:7:136"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "2165:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2165:6:136"
                    }
                  ]
                },
                {
                  "nativeSrc": "2191:46:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2191:46:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2222:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2222:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2233:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2233:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2218:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2218:3:136"
                        },
                        "nativeSrc": "2218:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2218:18:136"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2205:12:136",
                      "nodeType": "YulIdentifier",
                      "src": "2205:12:136"
                    },
                    "nativeSrc": "2205:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2205:32:136"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "2195:6:136",
                      "nodeType": "YulTypedName",
                      "src": "2195:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2280:16:136",
                    "nodeType": "YulBlock",
                    "src": "2280:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2289:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2289:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2292:1:136",
                              "nodeType": "YulLiteral",
                              "src": "2292:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2282:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2282:6:136"
                          },
                          "nativeSrc": "2282:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "2282:12:136"
                        },
                        "nativeSrc": "2282:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "2282:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "2252:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "2252:6:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2260:18:136",
                        "nodeType": "YulLiteral",
                        "src": "2260:18:136",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "2249:2:136",
                      "nodeType": "YulIdentifier",
                      "src": "2249:2:136"
                    },
                    "nativeSrc": "2249:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2249:30:136"
                  },
                  "nativeSrc": "2246:50:136",
                  "nodeType": "YulIf",
                  "src": "2246:50:136"
                },
                {
                  "nativeSrc": "2305:59:136",
                  "nodeType": "YulAssignment",
                  "src": "2305:59:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2336:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2336:9:136"
                          },
                          {
                            "name": "offset",
                            "nativeSrc": "2347:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2347:6:136"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2332:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2332:3:136"
                        },
                        "nativeSrc": "2332:22:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2332:22:136"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "2356:7:136",
                        "nodeType": "YulIdentifier",
                        "src": "2356:7:136"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nativeSrc": "2315:16:136",
                      "nodeType": "YulIdentifier",
                      "src": "2315:16:136"
                    },
                    "nativeSrc": "2315:49:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2315:49:136"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nativeSrc": "2305:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2305:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr",
            "nativeSrc": "1754:616:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1817:9:136",
                "nodeType": "YulTypedName",
                "src": "1817:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1828:7:136",
                "nodeType": "YulTypedName",
                "src": "1828:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1840:6:136",
                "nodeType": "YulTypedName",
                "src": "1840:6:136",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1848:6:136",
                "nodeType": "YulTypedName",
                "src": "1848:6:136",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "1856:6:136",
                "nodeType": "YulTypedName",
                "src": "1856:6:136",
                "type": ""
              }
            ],
            "src": "1754:616:136"
          },
          {
            "body": {
              "nativeSrc": "2504:102:136",
              "nodeType": "YulBlock",
              "src": "2504:102:136",
              "statements": [
                {
                  "nativeSrc": "2514:26:136",
                  "nodeType": "YulAssignment",
                  "src": "2514:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2526:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2526:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2537:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2537:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2522:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "2522:3:136"
                    },
                    "nativeSrc": "2522:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2522:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2514:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "2514:4:136"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2556:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2556:9:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "2571:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2571:6:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2587:3:136",
                                    "nodeType": "YulLiteral",
                                    "src": "2587:3:136",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2592:1:136",
                                    "nodeType": "YulLiteral",
                                    "src": "2592:1:136",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "2583:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "2583:3:136"
                                },
                                "nativeSrc": "2583:11:136",
                                "nodeType": "YulFunctionCall",
                                "src": "2583:11:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "2596:1:136",
                                "nodeType": "YulLiteral",
                                "src": "2596:1:136",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "2579:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "2579:3:136"
                            },
                            "nativeSrc": "2579:19:136",
                            "nodeType": "YulFunctionCall",
                            "src": "2579:19:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "2567:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2567:3:136"
                        },
                        "nativeSrc": "2567:32:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2567:32:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2549:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2549:6:136"
                    },
                    "nativeSrc": "2549:51:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2549:51:136"
                  },
                  "nativeSrc": "2549:51:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2549:51:136"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_WitnetProxy_$8994__to_t_address_payable__fromStack_reversed",
            "nativeSrc": "2375:231:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2473:9:136",
                "nodeType": "YulTypedName",
                "src": "2473:9:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2484:6:136",
                "nodeType": "YulTypedName",
                "src": "2484:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2495:4:136",
                "nodeType": "YulTypedName",
                "src": "2495:4:136",
                "type": ""
              }
            ],
            "src": "2375:231:136"
          },
          {
            "body": {
              "nativeSrc": "2758:366:136",
              "nodeType": "YulBlock",
              "src": "2758:366:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2775:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "2775:9:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "2790:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2790:6:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2806:3:136",
                                    "nodeType": "YulLiteral",
                                    "src": "2806:3:136",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2811:1:136",
                                    "nodeType": "YulLiteral",
                                    "src": "2811:1:136",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "2802:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "2802:3:136"
                                },
                                "nativeSrc": "2802:11:136",
                                "nodeType": "YulFunctionCall",
                                "src": "2802:11:136"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "2815:1:136",
                                "nodeType": "YulLiteral",
                                "src": "2815:1:136",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "2798:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "2798:3:136"
                            },
                            "nativeSrc": "2798:19:136",
                            "nodeType": "YulFunctionCall",
                            "src": "2798:19:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "2786:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2786:3:136"
                        },
                        "nativeSrc": "2786:32:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2786:32:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2768:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2768:6:136"
                    },
                    "nativeSrc": "2768:51:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2768:51:136"
                  },
                  "nativeSrc": "2768:51:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2768:51:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2839:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2839:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2850:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2850:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2835:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2835:3:136"
                        },
                        "nativeSrc": "2835:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2835:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2855:2:136",
                        "nodeType": "YulLiteral",
                        "src": "2855:2:136",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2828:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2828:6:136"
                    },
                    "nativeSrc": "2828:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2828:30:136"
                  },
                  "nativeSrc": "2828:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2828:30:136"
                },
                {
                  "nativeSrc": "2867:27:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2867:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nativeSrc": "2887:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "2887:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "2881:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "2881:5:136"
                    },
                    "nativeSrc": "2881:13:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2881:13:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "2871:6:136",
                      "nodeType": "YulTypedName",
                      "src": "2871:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2914:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2914:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2925:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2925:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2910:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2910:3:136"
                        },
                        "nativeSrc": "2910:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2910:18:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "2930:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "2930:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2903:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "2903:6:136"
                    },
                    "nativeSrc": "2903:34:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2903:34:136"
                  },
                  "nativeSrc": "2903:34:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2903:34:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2956:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "2956:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2967:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2967:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2952:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2952:3:136"
                        },
                        "nativeSrc": "2952:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2952:18:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nativeSrc": "2976:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "2976:6:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2984:2:136",
                            "nodeType": "YulLiteral",
                            "src": "2984:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2972:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "2972:3:136"
                        },
                        "nativeSrc": "2972:15:136",
                        "nodeType": "YulFunctionCall",
                        "src": "2972:15:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "2989:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "2989:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mcopy",
                      "nativeSrc": "2946:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "2946:5:136"
                    },
                    "nativeSrc": "2946:50:136",
                    "nodeType": "YulFunctionCall",
                    "src": "2946:50:136"
                  },
                  "nativeSrc": "2946:50:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "2946:50:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nativeSrc": "3020:9:136",
                                "nodeType": "YulIdentifier",
                                "src": "3020:9:136"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "3031:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "3031:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "3016:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "3016:3:136"
                            },
                            "nativeSrc": "3016:22:136",
                            "nodeType": "YulFunctionCall",
                            "src": "3016:22:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3040:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3040:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3012:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3012:3:136"
                        },
                        "nativeSrc": "3012:31:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3012:31:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3045:1:136",
                        "nodeType": "YulLiteral",
                        "src": "3045:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3005:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3005:6:136"
                    },
                    "nativeSrc": "3005:42:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3005:42:136"
                  },
                  "nativeSrc": "3005:42:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3005:42:136"
                },
                {
                  "nativeSrc": "3056:62:136",
                  "nodeType": "YulAssignment",
                  "src": "3056:62:136",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3072:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3072:9:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nativeSrc": "3091:6:136",
                                    "nodeType": "YulIdentifier",
                                    "src": "3091:6:136"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3099:2:136",
                                    "nodeType": "YulLiteral",
                                    "src": "3099:2:136",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "3087:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "3087:3:136"
                                },
                                "nativeSrc": "3087:15:136",
                                "nodeType": "YulFunctionCall",
                                "src": "3087:15:136"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3108:2:136",
                                    "nodeType": "YulLiteral",
                                    "src": "3108:2:136",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nativeSrc": "3104:3:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "3104:3:136"
                                },
                                "nativeSrc": "3104:7:136",
                                "nodeType": "YulFunctionCall",
                                "src": "3104:7:136"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "3083:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "3083:3:136"
                            },
                            "nativeSrc": "3083:29:136",
                            "nodeType": "YulFunctionCall",
                            "src": "3083:29:136"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3068:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3068:3:136"
                        },
                        "nativeSrc": "3068:45:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3068:45:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3115:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3115:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3064:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3064:3:136"
                    },
                    "nativeSrc": "3064:54:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3064:54:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3056:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "3056:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed",
            "nativeSrc": "2611:513:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2719:9:136",
                "nodeType": "YulTypedName",
                "src": "2719:9:136",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "2730:6:136",
                "nodeType": "YulTypedName",
                "src": "2730:6:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2738:6:136",
                "nodeType": "YulTypedName",
                "src": "2738:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2749:4:136",
                "nodeType": "YulTypedName",
                "src": "2749:4:136",
                "type": ""
              }
            ],
            "src": "2611:513:136"
          },
          {
            "body": {
              "nativeSrc": "3207:199:136",
              "nodeType": "YulBlock",
              "src": "3207:199:136",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "3253:16:136",
                    "nodeType": "YulBlock",
                    "src": "3253:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3262:1:136",
                              "nodeType": "YulLiteral",
                              "src": "3262:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3265:1:136",
                              "nodeType": "YulLiteral",
                              "src": "3265:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3255:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "3255:6:136"
                          },
                          "nativeSrc": "3255:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "3255:12:136"
                        },
                        "nativeSrc": "3255:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "3255:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "3228:7:136",
                            "nodeType": "YulIdentifier",
                            "src": "3228:7:136"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "3237:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3237:9:136"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "3224:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3224:3:136"
                        },
                        "nativeSrc": "3224:23:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3224:23:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3249:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3249:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "3220:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3220:3:136"
                    },
                    "nativeSrc": "3220:32:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3220:32:136"
                  },
                  "nativeSrc": "3217:52:136",
                  "nodeType": "YulIf",
                  "src": "3217:52:136"
                },
                {
                  "nativeSrc": "3278:29:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3278:29:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3297:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3297:9:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "3291:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "3291:5:136"
                    },
                    "nativeSrc": "3291:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3291:16:136"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "3282:5:136",
                      "nodeType": "YulTypedName",
                      "src": "3282:5:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3360:16:136",
                    "nodeType": "YulBlock",
                    "src": "3360:16:136",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3369:1:136",
                              "nodeType": "YulLiteral",
                              "src": "3369:1:136",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3372:1:136",
                              "nodeType": "YulLiteral",
                              "src": "3372:1:136",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3362:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "3362:6:136"
                          },
                          "nativeSrc": "3362:12:136",
                          "nodeType": "YulFunctionCall",
                          "src": "3362:12:136"
                        },
                        "nativeSrc": "3362:12:136",
                        "nodeType": "YulExpressionStatement",
                        "src": "3362:12:136"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "3329:5:136",
                            "nodeType": "YulIdentifier",
                            "src": "3329:5:136"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nativeSrc": "3350:5:136",
                                    "nodeType": "YulIdentifier",
                                    "src": "3350:5:136"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "3343:6:136",
                                  "nodeType": "YulIdentifier",
                                  "src": "3343:6:136"
                                },
                                "nativeSrc": "3343:13:136",
                                "nodeType": "YulFunctionCall",
                                "src": "3343:13:136"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "3336:6:136",
                              "nodeType": "YulIdentifier",
                              "src": "3336:6:136"
                            },
                            "nativeSrc": "3336:21:136",
                            "nodeType": "YulFunctionCall",
                            "src": "3336:21:136"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "3326:2:136",
                          "nodeType": "YulIdentifier",
                          "src": "3326:2:136"
                        },
                        "nativeSrc": "3326:32:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3326:32:136"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "3319:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3319:6:136"
                    },
                    "nativeSrc": "3319:40:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3319:40:136"
                  },
                  "nativeSrc": "3316:60:136",
                  "nodeType": "YulIf",
                  "src": "3316:60:136"
                },
                {
                  "nativeSrc": "3385:15:136",
                  "nodeType": "YulAssignment",
                  "src": "3385:15:136",
                  "value": {
                    "name": "value",
                    "nativeSrc": "3395:5:136",
                    "nodeType": "YulIdentifier",
                    "src": "3395:5:136"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "3385:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3385:6:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nativeSrc": "3129:277:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3173:9:136",
                "nodeType": "YulTypedName",
                "src": "3173:9:136",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "3184:7:136",
                "nodeType": "YulTypedName",
                "src": "3184:7:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "3196:6:136",
                "nodeType": "YulTypedName",
                "src": "3196:6:136",
                "type": ""
              }
            ],
            "src": "3129:277:136"
          },
          {
            "body": {
              "nativeSrc": "3585:231:136",
              "nodeType": "YulBlock",
              "src": "3585:231:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3602:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3602:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3613:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3613:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3595:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3595:6:136"
                    },
                    "nativeSrc": "3595:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3595:21:136"
                  },
                  "nativeSrc": "3595:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3595:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "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": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3632:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3632:3:136"
                        },
                        "nativeSrc": "3632:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3632:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3652:2:136",
                        "nodeType": "YulLiteral",
                        "src": "3652:2:136",
                        "type": "",
                        "value": "41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3625:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3625:6:136"
                    },
                    "nativeSrc": "3625:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3625:30:136"
                  },
                  "nativeSrc": "3625:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3625:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3675:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3675:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3686:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3686:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3671:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3671:3:136"
                        },
                        "nativeSrc": "3671:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3671:18:136"
                      },
                      {
                        "hexValue": "5769746e65744465706c6f79657244656665727265643a20616c726561647920",
                        "kind": "string",
                        "nativeSrc": "3691:34:136",
                        "nodeType": "YulLiteral",
                        "src": "3691:34:136",
                        "type": "",
                        "value": "WitnetDeployerDeferred: already "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3664:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3664:6:136"
                    },
                    "nativeSrc": "3664:62:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3664:62:136"
                  },
                  "nativeSrc": "3664:62:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3664:62:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3746:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "3746:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3757:2:136",
                            "nodeType": "YulLiteral",
                            "src": "3757:2:136",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3742:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "3742:3:136"
                        },
                        "nativeSrc": "3742:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "3742:18:136"
                      },
                      {
                        "hexValue": "70726f786966696564",
                        "kind": "string",
                        "nativeSrc": "3762:11:136",
                        "nodeType": "YulLiteral",
                        "src": "3762:11:136",
                        "type": "",
                        "value": "proxified"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3735:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "3735:6:136"
                    },
                    "nativeSrc": "3735:39:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3735:39:136"
                  },
                  "nativeSrc": "3735:39:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "3735:39:136"
                },
                {
                  "nativeSrc": "3783:27:136",
                  "nodeType": "YulAssignment",
                  "src": "3783:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3795:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "3795:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3806:3:136",
                        "nodeType": "YulLiteral",
                        "src": "3806:3:136",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3791:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "3791:3:136"
                    },
                    "nativeSrc": "3791:19:136",
                    "nodeType": "YulFunctionCall",
                    "src": "3791:19:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3783:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "3783:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9242d5773420af7dd596b21ade08be4a57ab076ed82064b6d6486302e44bdb4c__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "3411:405:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3562:9:136",
                "nodeType": "YulTypedName",
                "src": "3562:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3576:4:136",
                "nodeType": "YulTypedName",
                "src": "3576:4:136",
                "type": ""
              }
            ],
            "src": "3411:405:136"
          },
          {
            "body": {
              "nativeSrc": "4022:240:136",
              "nodeType": "YulBlock",
              "src": "4022:240:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4039:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "4039:3:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "4048:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "4048:6:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4060:3:136",
                                "nodeType": "YulLiteral",
                                "src": "4060:3:136",
                                "type": "",
                                "value": "248"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "4065:3:136",
                                "nodeType": "YulLiteral",
                                "src": "4065:3:136",
                                "type": "",
                                "value": "255"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4056:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "4056:3:136"
                            },
                            "nativeSrc": "4056:13:136",
                            "nodeType": "YulFunctionCall",
                            "src": "4056:13:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4044:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4044:3:136"
                        },
                        "nativeSrc": "4044:26:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4044:26:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4032:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4032:6:136"
                    },
                    "nativeSrc": "4032:39:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4032:39:136"
                  },
                  "nativeSrc": "4032:39:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4032:39:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4091:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "4091:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4096:1:136",
                            "nodeType": "YulLiteral",
                            "src": "4096:1:136",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4087:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4087:3:136"
                        },
                        "nativeSrc": "4087:11:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4087:11:136"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4108:2:136",
                                "nodeType": "YulLiteral",
                                "src": "4108:2:136",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value1",
                                "nativeSrc": "4112:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "4112:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4104:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "4104:3:136"
                            },
                            "nativeSrc": "4104:15:136",
                            "nodeType": "YulFunctionCall",
                            "src": "4104:15:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4125:26:136",
                                "nodeType": "YulLiteral",
                                "src": "4125:26:136",
                                "type": "",
                                "value": "0xffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "4121:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "4121:3:136"
                            },
                            "nativeSrc": "4121:31:136",
                            "nodeType": "YulFunctionCall",
                            "src": "4121:31:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4100:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4100:3:136"
                        },
                        "nativeSrc": "4100:53:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4100:53:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4080:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4080:6:136"
                    },
                    "nativeSrc": "4080:74:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4080:74:136"
                  },
                  "nativeSrc": "4080:74:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4080:74:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4174:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "4174:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4179:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4179:2:136",
                            "type": "",
                            "value": "21"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4170:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4170:3:136"
                        },
                        "nativeSrc": "4170:12:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4170:12:136"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "4184:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "4184:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4163:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4163:6:136"
                    },
                    "nativeSrc": "4163:28:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4163:28:136"
                  },
                  "nativeSrc": "4163:28:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4163:28:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4211:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "4211:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4216:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4216:2:136",
                            "type": "",
                            "value": "53"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4207:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4207:3:136"
                        },
                        "nativeSrc": "4207:12:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4207:12:136"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "4221:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "4221:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4200:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4200:6:136"
                    },
                    "nativeSrc": "4200:28:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4200:28:136"
                  },
                  "nativeSrc": "4200:28:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4200:28:136"
                },
                {
                  "nativeSrc": "4237:19:136",
                  "nodeType": "YulAssignment",
                  "src": "4237:19:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4248:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "4248:3:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4253:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4253:2:136",
                        "type": "",
                        "value": "85"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4244:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4244:3:136"
                    },
                    "nativeSrc": "4244:12:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4244:12:136"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "4237:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4237:3:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "3821:441:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "3974:3:136",
                "nodeType": "YulTypedName",
                "src": "3974:3:136",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "3979:6:136",
                "nodeType": "YulTypedName",
                "src": "3979:6:136",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "3987:6:136",
                "nodeType": "YulTypedName",
                "src": "3987:6:136",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "3995:6:136",
                "nodeType": "YulTypedName",
                "src": "3995:6:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "4003:6:136",
                "nodeType": "YulTypedName",
                "src": "4003:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "4014:3:136",
                "nodeType": "YulTypedName",
                "src": "4014:3:136",
                "type": ""
              }
            ],
            "src": "3821:441:136"
          },
          {
            "body": {
              "nativeSrc": "4543:227:136",
              "nodeType": "YulBlock",
              "src": "4543:227:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4560:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "4560:3:136"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "4569:3:136",
                            "nodeType": "YulLiteral",
                            "src": "4569:3:136",
                            "type": "",
                            "value": "248"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4574:3:136",
                            "nodeType": "YulLiteral",
                            "src": "4574:3:136",
                            "type": "",
                            "value": "255"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "4565:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4565:3:136"
                        },
                        "nativeSrc": "4565:13:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4565:13:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4553:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4553:6:136"
                    },
                    "nativeSrc": "4553:26:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4553:26:136"
                  },
                  "nativeSrc": "4553:26:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4553:26:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4599:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "4599:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4604:1:136",
                            "nodeType": "YulLiteral",
                            "src": "4604:1:136",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4595:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4595:3:136"
                        },
                        "nativeSrc": "4595:11:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4595:11:136"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4616:2:136",
                                "nodeType": "YulLiteral",
                                "src": "4616:2:136",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value0",
                                "nativeSrc": "4620:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "4620:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4612:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "4612:3:136"
                            },
                            "nativeSrc": "4612:15:136",
                            "nodeType": "YulFunctionCall",
                            "src": "4612:15:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4633:26:136",
                                "nodeType": "YulLiteral",
                                "src": "4633:26:136",
                                "type": "",
                                "value": "0xffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "4629:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "4629:3:136"
                            },
                            "nativeSrc": "4629:31:136",
                            "nodeType": "YulFunctionCall",
                            "src": "4629:31:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4608:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4608:3:136"
                        },
                        "nativeSrc": "4608:53:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4608:53:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4588:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4588:6:136"
                    },
                    "nativeSrc": "4588:74:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4588:74:136"
                  },
                  "nativeSrc": "4588:74:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4588:74:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4682:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "4682:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4687:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4687:2:136",
                            "type": "",
                            "value": "21"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4678:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4678:3:136"
                        },
                        "nativeSrc": "4678:12:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4678:12:136"
                      },
                      {
                        "name": "value1",
                        "nativeSrc": "4692:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "4692:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4671:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4671:6:136"
                    },
                    "nativeSrc": "4671:28:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4671:28:136"
                  },
                  "nativeSrc": "4671:28:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4671:28:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4719:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "4719:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4724:2:136",
                            "nodeType": "YulLiteral",
                            "src": "4724:2:136",
                            "type": "",
                            "value": "53"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4715:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "4715:3:136"
                        },
                        "nativeSrc": "4715:12:136",
                        "nodeType": "YulFunctionCall",
                        "src": "4715:12:136"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "4729:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "4729:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4708:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "4708:6:136"
                    },
                    "nativeSrc": "4708:28:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4708:28:136"
                  },
                  "nativeSrc": "4708:28:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "4708:28:136"
                },
                {
                  "nativeSrc": "4745:19:136",
                  "nodeType": "YulAssignment",
                  "src": "4745:19:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4756:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "4756:3:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4761:2:136",
                        "nodeType": "YulLiteral",
                        "src": "4761:2:136",
                        "type": "",
                        "value": "85"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4752:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4752:3:136"
                    },
                    "nativeSrc": "4752:12:136",
                    "nodeType": "YulFunctionCall",
                    "src": "4752:12:136"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "4745:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "4745:3:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9_t_address_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "4267:503:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "4503:3:136",
                "nodeType": "YulTypedName",
                "src": "4503:3:136",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "4508:6:136",
                "nodeType": "YulTypedName",
                "src": "4508:6:136",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "4516:6:136",
                "nodeType": "YulTypedName",
                "src": "4516:6:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "4524:6:136",
                "nodeType": "YulTypedName",
                "src": "4524:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "4535:3:136",
                "nodeType": "YulTypedName",
                "src": "4535:3:136",
                "type": ""
              }
            ],
            "src": "4267:503:136"
          },
          {
            "body": {
              "nativeSrc": "5096:197:136",
              "nodeType": "YulBlock",
              "src": "5096:197:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "5113:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "5113:3:136"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "5122:3:136",
                            "nodeType": "YulLiteral",
                            "src": "5122:3:136",
                            "type": "",
                            "value": "242"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5127:5:136",
                            "nodeType": "YulLiteral",
                            "src": "5127:5:136",
                            "type": "",
                            "value": "13733"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "5118:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5118:3:136"
                        },
                        "nativeSrc": "5118:15:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5118:15:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5106:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5106:6:136"
                    },
                    "nativeSrc": "5106:28:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5106:28:136"
                  },
                  "nativeSrc": "5106:28:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5106:28:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "5154:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "5154:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5159:1:136",
                            "nodeType": "YulLiteral",
                            "src": "5159:1:136",
                            "type": "",
                            "value": "2"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5150:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5150:3:136"
                        },
                        "nativeSrc": "5150:11:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5150:11:136"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "5171:2:136",
                                "nodeType": "YulLiteral",
                                "src": "5171:2:136",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value0",
                                "nativeSrc": "5175:6:136",
                                "nodeType": "YulIdentifier",
                                "src": "5175:6:136"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "5167:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "5167:3:136"
                            },
                            "nativeSrc": "5167:15:136",
                            "nodeType": "YulFunctionCall",
                            "src": "5167:15:136"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "5188:26:136",
                                "nodeType": "YulLiteral",
                                "src": "5188:26:136",
                                "type": "",
                                "value": "0xffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "5184:3:136",
                              "nodeType": "YulIdentifier",
                              "src": "5184:3:136"
                            },
                            "nativeSrc": "5184:31:136",
                            "nodeType": "YulFunctionCall",
                            "src": "5184:31:136"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "5163:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5163:3:136"
                        },
                        "nativeSrc": "5163:53:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5163:53:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5143:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5143:6:136"
                    },
                    "nativeSrc": "5143:74:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5143:74:136"
                  },
                  "nativeSrc": "5143:74:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5143:74:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "5237:3:136",
                            "nodeType": "YulIdentifier",
                            "src": "5237:3:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5242:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5242:2:136",
                            "type": "",
                            "value": "22"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5233:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5233:3:136"
                        },
                        "nativeSrc": "5233:12:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5233:12:136"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "5251:3:136",
                            "nodeType": "YulLiteral",
                            "src": "5251:3:136",
                            "type": "",
                            "value": "248"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5256:1:136",
                            "nodeType": "YulLiteral",
                            "src": "5256:1:136",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "5247:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5247:3:136"
                        },
                        "nativeSrc": "5247:11:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5247:11:136"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5226:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5226:6:136"
                    },
                    "nativeSrc": "5226:33:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5226:33:136"
                  },
                  "nativeSrc": "5226:33:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5226:33:136"
                },
                {
                  "nativeSrc": "5268:19:136",
                  "nodeType": "YulAssignment",
                  "src": "5268:19:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "5279:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "5279:3:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5284:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5284:2:136",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5275:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5275:3:136"
                    },
                    "nativeSrc": "5275:12:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5275:12:136"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "5268:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5268:3:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_stringliteral_4fdc04d28c8d22070e5fd0f23f00bae0b21cc4e5091b5fd7a9cad9babd3668cf_t_address_t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2__to_t_string_memory_ptr_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "4775:518:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "5072:3:136",
                "nodeType": "YulTypedName",
                "src": "5072:3:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "5077:6:136",
                "nodeType": "YulTypedName",
                "src": "5077:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "5088:3:136",
                "nodeType": "YulTypedName",
                "src": "5088:3:136",
                "type": ""
              }
            ],
            "src": "4775:518:136"
          },
          {
            "body": {
              "nativeSrc": "5472:180:136",
              "nodeType": "YulBlock",
              "src": "5472:180:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5489:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5489:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5500:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5500:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5482:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5482:6:136"
                    },
                    "nativeSrc": "5482:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5482:21:136"
                  },
                  "nativeSrc": "5482:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5482:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5523:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5523:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5534:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5534:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5519:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5519:3:136"
                        },
                        "nativeSrc": "5519:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5519:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5539:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5539:2:136",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5512:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5512:6:136"
                    },
                    "nativeSrc": "5512:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5512:30:136"
                  },
                  "nativeSrc": "5512:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5512:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5562:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5562:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5573:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5573:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5558:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5558:3:136"
                        },
                        "nativeSrc": "5558:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5558:18:136"
                      },
                      {
                        "hexValue": "437265617465333a2074617267657420616c726561647920657869737473",
                        "kind": "string",
                        "nativeSrc": "5578:32:136",
                        "nodeType": "YulLiteral",
                        "src": "5578:32:136",
                        "type": "",
                        "value": "Create3: target already exists"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5551:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5551:6:136"
                    },
                    "nativeSrc": "5551:60:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5551:60:136"
                  },
                  "nativeSrc": "5551:60:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5551:60:136"
                },
                {
                  "nativeSrc": "5620:26:136",
                  "nodeType": "YulAssignment",
                  "src": "5620:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5632:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5632:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5643:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5643:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5628:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5628:3:136"
                    },
                    "nativeSrc": "5628:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5628:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5620:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "5620:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_eff5890756d2c5621f001169bb16c941329db031eba2edbb4865370c160b3eae__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "5298:354:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5449:9:136",
                "nodeType": "YulTypedName",
                "src": "5449:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5463:4:136",
                "nodeType": "YulTypedName",
                "src": "5463:4:136",
                "type": ""
              }
            ],
            "src": "5298:354:136"
          },
          {
            "body": {
              "nativeSrc": "5831:181:136",
              "nodeType": "YulBlock",
              "src": "5831:181:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5848:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5848:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5859:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5859:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5841:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5841:6:136"
                    },
                    "nativeSrc": "5841:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5841:21:136"
                  },
                  "nativeSrc": "5841:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5841:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5882:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5882:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5893:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5893:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5878:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5878:3:136"
                        },
                        "nativeSrc": "5878:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5878:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "5898:2:136",
                        "nodeType": "YulLiteral",
                        "src": "5898:2:136",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5871:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5871:6:136"
                    },
                    "nativeSrc": "5871:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5871:30:136"
                  },
                  "nativeSrc": "5871:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5871:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "5921:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "5921:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "5932:2:136",
                            "nodeType": "YulLiteral",
                            "src": "5932:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "5917:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "5917:3:136"
                        },
                        "nativeSrc": "5917:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "5917:18:136"
                      },
                      {
                        "hexValue": "437265617465333a206572726f72206372656174696e6720666163746f7279",
                        "kind": "string",
                        "nativeSrc": "5937:33:136",
                        "nodeType": "YulLiteral",
                        "src": "5937:33:136",
                        "type": "",
                        "value": "Create3: error creating factory"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "5910:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "5910:6:136"
                    },
                    "nativeSrc": "5910:61:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5910:61:136"
                  },
                  "nativeSrc": "5910:61:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "5910:61:136"
                },
                {
                  "nativeSrc": "5980:26:136",
                  "nodeType": "YulAssignment",
                  "src": "5980:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "5992:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "5992:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6003:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6003:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "5988:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "5988:3:136"
                    },
                    "nativeSrc": "5988:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "5988:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "5980:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "5980:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9c800ce8d486c3397a1a9cc324cfcd264ced53e7b922ccf3390ef85c645102b0__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "5657:355:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "5808:9:136",
                "nodeType": "YulTypedName",
                "src": "5808:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "5822:4:136",
                "nodeType": "YulTypedName",
                "src": "5822:4:136",
                "type": ""
              }
            ],
            "src": "5657:355:136"
          },
          {
            "body": {
              "nativeSrc": "6154:164:136",
              "nodeType": "YulBlock",
              "src": "6154:164:136",
              "statements": [
                {
                  "nativeSrc": "6164:27:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6164:27:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nativeSrc": "6184:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6184:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "6178:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "6178:5:136"
                    },
                    "nativeSrc": "6178:13:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6178:13:136"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "6168:6:136",
                      "nodeType": "YulTypedName",
                      "src": "6168:6:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "6206:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "6206:3:136"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "6215:6:136",
                            "nodeType": "YulIdentifier",
                            "src": "6215:6:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6223:4:136",
                            "nodeType": "YulLiteral",
                            "src": "6223:4:136",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6211:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6211:3:136"
                        },
                        "nativeSrc": "6211:17:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6211:17:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "6230:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6230:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "mcopy",
                      "nativeSrc": "6200:5:136",
                      "nodeType": "YulIdentifier",
                      "src": "6200:5:136"
                    },
                    "nativeSrc": "6200:37:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6200:37:136"
                  },
                  "nativeSrc": "6200:37:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6200:37:136"
                },
                {
                  "nativeSrc": "6246:26:136",
                  "nodeType": "YulVariableDeclaration",
                  "src": "6246:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "6260:3:136",
                        "nodeType": "YulIdentifier",
                        "src": "6260:3:136"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "6265:6:136",
                        "nodeType": "YulIdentifier",
                        "src": "6265:6:136"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6256:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "6256:3:136"
                    },
                    "nativeSrc": "6256:16:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6256:16:136"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "6250:2:136",
                      "nodeType": "YulTypedName",
                      "src": "6250:2:136",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "6288:2:136",
                        "nodeType": "YulIdentifier",
                        "src": "6288:2:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6292:1:136",
                        "nodeType": "YulLiteral",
                        "src": "6292:1:136",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6281:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6281:6:136"
                    },
                    "nativeSrc": "6281:13:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6281:13:136"
                  },
                  "nativeSrc": "6281:13:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6281:13:136"
                },
                {
                  "nativeSrc": "6303:9:136",
                  "nodeType": "YulAssignment",
                  "src": "6303:9:136",
                  "value": {
                    "name": "_1",
                    "nativeSrc": "6310:2:136",
                    "nodeType": "YulIdentifier",
                    "src": "6310:2:136"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "6303:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "6303:3:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "6017:301:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "6130:3:136",
                "nodeType": "YulTypedName",
                "src": "6130:3:136",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "6135:6:136",
                "nodeType": "YulTypedName",
                "src": "6135:6:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "6146:3:136",
                "nodeType": "YulTypedName",
                "src": "6146:3:136",
                "type": ""
              }
            ],
            "src": "6017:301:136"
          },
          {
            "body": {
              "nativeSrc": "6497:180:136",
              "nodeType": "YulBlock",
              "src": "6497:180:136",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6514:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "6514:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6525:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6525:2:136",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6507:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6507:6:136"
                    },
                    "nativeSrc": "6507:21:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6507:21:136"
                  },
                  "nativeSrc": "6507:21:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6507:21:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6548:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "6548:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6559:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6559:2:136",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6544:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6544:3:136"
                        },
                        "nativeSrc": "6544:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6544:18:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6564:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6564:2:136",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6537:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6537:6:136"
                    },
                    "nativeSrc": "6537:30:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6537:30:136"
                  },
                  "nativeSrc": "6537:30:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6537:30:136"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "6587:9:136",
                            "nodeType": "YulIdentifier",
                            "src": "6587:9:136"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "6598:2:136",
                            "nodeType": "YulLiteral",
                            "src": "6598:2:136",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "6583:3:136",
                          "nodeType": "YulIdentifier",
                          "src": "6583:3:136"
                        },
                        "nativeSrc": "6583:18:136",
                        "nodeType": "YulFunctionCall",
                        "src": "6583:18:136"
                      },
                      {
                        "hexValue": "437265617465333a206572726f72206372656174696e6720746172676574",
                        "kind": "string",
                        "nativeSrc": "6603:32:136",
                        "nodeType": "YulLiteral",
                        "src": "6603:32:136",
                        "type": "",
                        "value": "Create3: error creating target"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "6576:6:136",
                      "nodeType": "YulIdentifier",
                      "src": "6576:6:136"
                    },
                    "nativeSrc": "6576:60:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6576:60:136"
                  },
                  "nativeSrc": "6576:60:136",
                  "nodeType": "YulExpressionStatement",
                  "src": "6576:60:136"
                },
                {
                  "nativeSrc": "6645:26:136",
                  "nodeType": "YulAssignment",
                  "src": "6645:26:136",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "6657:9:136",
                        "nodeType": "YulIdentifier",
                        "src": "6657:9:136"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "6668:2:136",
                        "nodeType": "YulLiteral",
                        "src": "6668:2:136",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "6653:3:136",
                      "nodeType": "YulIdentifier",
                      "src": "6653:3:136"
                    },
                    "nativeSrc": "6653:18:136",
                    "nodeType": "YulFunctionCall",
                    "src": "6653:18:136"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "6645:4:136",
                      "nodeType": "YulIdentifier",
                      "src": "6645:4:136"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_1398d0fda5c4dd82767513d52fb4e190bf03bb7a57b33af8f2bf0a3f254cffa0__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "6323:354:136",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "6474:9:136",
                "nodeType": "YulTypedName",
                "src": "6474:9:136",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "6488:4:136",
                "nodeType": "YulTypedName",
                "src": "6488:4:136",
                "type": ""
              }
            ],
            "src": "6323:354:136"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := 0\n        value := calldataload(headStart)\n        value0 := value\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 abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(length, 0x1f), not(31)), 63), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, length)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), length)\n        mstore(add(add(memPtr, length), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        let value := 0\n        value := calldataload(add(headStart, 32))\n        value1 := value\n    }\n    function abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := 0\n        value := calldataload(headStart)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        if iszero(eq(value_1, and(value_1, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value1 := value_1\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_contract$_WitnetProxy_$8994__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), 64)\n        let length := mload(value1)\n        mstore(add(headStart, 64), length)\n        mcopy(add(headStart, 96), add(value1, 32), length)\n        mstore(add(add(headStart, length), 96), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 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_9242d5773420af7dd596b21ade08be4a57ab076ed82064b6d6486302e44bdb4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 41)\n        mstore(add(headStart, 64), \"WitnetDeployerDeferred: already \")\n        mstore(add(headStart, 96), \"proxified\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, and(value0, shl(248, 255)))\n        mstore(add(pos, 1), and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n        mstore(add(pos, 21), value2)\n        mstore(add(pos, 53), value3)\n        end := add(pos, 85)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9_t_address_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n    {\n        mstore(pos, shl(248, 255))\n        mstore(add(pos, 1), and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n        mstore(add(pos, 21), value1)\n        mstore(add(pos, 53), value2)\n        end := add(pos, 85)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_4fdc04d28c8d22070e5fd0f23f00bae0b21cc4e5091b5fd7a9cad9babd3668cf_t_address_t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2__to_t_string_memory_ptr_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        mstore(pos, shl(242, 13733))\n        mstore(add(pos, 2), and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n        mstore(add(pos, 22), shl(248, 1))\n        end := add(pos, 23)\n    }\n    function abi_encode_tuple_t_stringliteral_eff5890756d2c5621f001169bb16c941329db031eba2edbb4865370c160b3eae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Create3: target already exists\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9c800ce8d486c3397a1a9cc324cfcd264ced53e7b922ccf3390ef85c645102b0__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), \"Create3: error creating factory\")\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_1398d0fda5c4dd82767513d52fb4e190bf03bb7a57b33af8f2bf0a3f254cffa0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"Create3: error creating target\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 136,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "531:2849:23:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "531:2849:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2218:159;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;409:32:136;;;391:51;;379:2;364:18;2218:159:23;;;;;;;1083:364;;;;;;:::i;:::-;;:::i;2385:990::-;;;;;;:::i;:::-;;:::i;1793:417::-;;;;;;:::i;:::-;;:::i;2218:159::-;2309:7;2341:28;2363:5;2341:21;:28::i;:::-;2334:35;2218:159;-1:-1:-1;;2218:159:23:o;1083:364::-;1180:17;1227:31;1241:9;1252:5;1227:13;:31::i;:::-;1215:43;;1273:9;-1:-1:-1;;;;;1273:21:23;;1298:1;1273:26;1269:171;;1408:5;1396:9;1390:16;1383:4;1372:9;1368:20;1365:1;1357:57;1344:70;1083:364;-1:-1:-1;;;1083:364:23:o;2385:990::-;2521:11;2550:18;2571:30;2590:10;2571:18;:30::i;:::-;2550:51;;2616:10;-1:-1:-1;;;;;2616:22:23;;2642:1;2616:27;2612:756;;2699:58;2714:10;2726:30;;;;;;;;:::i;:::-;-1:-1:-1;;2726:30:23;;;;;;;;;;;;;;2699:14;:58::i;:::-;;2845:10;-1:-1:-1;;;;;2825:42:23;;2886:20;3077:10;3175:9;2975:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2825:393;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3260:10:23;-1:-1:-1;3233:39:23;;2612:756;3305:51;;-1:-1:-1;;;3305:51:23;;3613:2:136;3305:51:23;;;3595:21:136;3652:2;3632:18;;;3625:30;3691:34;3671:18;;;3664:62;-1:-1:-1;;;3742:18:136;;;3735:39;3791:19;;3305:51:23;;;;;;;;2385:990;;;;;;:::o;1793:417::-;2135:20;;;;;;;1997:177;;;-1:-1:-1;;;;;;1997:177:23;;;4032:39:136;2079:4:23;4108:2:136;4104:15;-1:-1:-1;;4100:53:136;4087:11;;;4080:74;4170:12;;;4163:28;;;;4207:12;;;;4200:28;;;;1997:177:23;;;;;;;;;;4244:12:136;;;;1997:177:23;;;1969:220;;;;;;1793:417::o;5013:1163:111:-;2439:24;;;;;;;;;;;-1:-1:-1;;;2439:24:111;;;;;5227:216;;-1:-1:-1;;;;;;5227:216:111;;;4553:26:136;5320:4:111;4616:2:136;4612:15;;;-1:-1:-1;;4608:53:136;;;4595:11;;;4588:74;4678:12;;;4671:28;;;;2429:35:111;4715:12:136;;;;4708:28;;;;5227:216:111;;;;;;;;;;4752:12:136;;;5227:216:111;;5191:275;;;;;;-1:-1:-1;;;5643:457:111;;;5106:28:136;5167:15;;5163:53;;;5150:11;;;5143:74;-1:-1:-1;;;5233:12:136;;;5226:33;5643:457:111;;;;;;;;;5275:12:136;;;;5643:457:111;;;5607:516;;;;;;5013:1163::o;2865:167::-;2961:7;2993:31;3000:5;3007:13;3022:1;3626:17;3710:20;3724:5;3710:13;:20::i;:::-;3698:32;-1:-1:-1;;;;;;3745:21:111;;;:26;3741:72;;3773:40;;-1:-1:-1;;;3773:40:111;;5500:2:136;3773:40:111;;;5482:21:136;5539:2;5519:18;;;5512:30;5578:32;5558:18;;;5551:60;5628:18;;3773:40:111;5298:354:136;3741:72:111;3912:24;;;;;;;;;;;;;-1:-1:-1;;;3912:24:111;;;;;;3853:16;;3912:24;4254:5;;3853:16;4191:69;4179:81;-1:-1:-1;;;;;;4289:22:111;;4281:66;;;;-1:-1:-1;;;4281:66:111;;5859:2:136;4281:66:111;;;5841:21:136;5898:2;5878:18;;;5871:30;5937:33;5917:18;;;5910:61;5988:18;;4281:66:111;5657:355:136;4281:66:111;4409:13;4428:8;-1:-1:-1;;;;;4428:13:111;4449:6;4457:13;4428:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4408:63;;;4490:8;:38;;;;-1:-1:-1;;;;;;4502:21:111;;;:26;;4490:38;4482:81;;;;-1:-1:-1;;;4482:81:111;;6525:2:136;4482:81:111;;;6507:21:136;6564:2;6544:18;;;6537:30;6603:32;6583:18;;;6576:60;6653:18;;4482:81:111;6323:354:136;4482:81:111;3650:921;;;3515:1056;;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:226:136:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:136;;14:226;-1:-1:-1;14:226:136:o;453:127::-;514:10;509:3;505:20;502:1;495:31;545:4;542:1;535:15;569:4;566:1;559:15;585:725;627:5;680:3;673:4;665:6;661:17;657:27;647:55;;698:1;695;688:12;647:55;738:6;725:20;768:18;760:6;757:30;754:56;;;790:18;;:::i;:::-;839:2;833:9;931:2;893:17;;-1:-1:-1;;889:31:136;;;922:2;885:40;881:54;869:67;;966:18;951:34;;987:22;;;948:62;945:88;;;1013:18;;:::i;:::-;1049:2;1042:22;1073;;;1114:19;;;1135:4;1110:30;1107:39;-1:-1:-1;1104:59:136;;;1159:1;1156;1149:12;1104:59;1223:6;1216:4;1208:6;1204:17;1197:4;1189:6;1185:17;1172:58;1278:1;1250:19;;;1271:4;1246:30;1239:41;;;;1254:6;585:725;-1:-1:-1;;;585:725:136:o;1315:434::-;1392:6;1400;1453:2;1441:9;1432:7;1428:23;1424:32;1421:52;;;1469:1;1466;1459:12;1421:52;1509:9;1496:23;1542:18;1534:6;1531:30;1528:50;;;1574:1;1571;1564:12;1528:50;1597:49;1638:7;1629:6;1618:9;1614:22;1597:49;:::i;:::-;1587:59;1715:2;1700:18;;;;1687:32;;-1:-1:-1;;;;1315:434:136:o;1754:616::-;1840:6;1848;1856;1909:2;1897:9;1888:7;1884:23;1880:32;1877:52;;;1925:1;1922;1915:12;1877:52;1970:23;;;-1:-1:-1;2069:2:136;2054:18;;2041:32;-1:-1:-1;;;;;2104:33:136;;2092:46;;2082:74;;2152:1;2149;2142:12;2082:74;2175:7;-1:-1:-1;2233:2:136;2218:18;;2205:32;2260:18;2249:30;;2246:50;;;2292:1;2289;2282:12;2246:50;2315:49;2356:7;2347:6;2336:9;2332:22;2315:49;:::i;:::-;2305:59;;;1754:616;;;;;:::o;2611:513::-;2815:1;2811;2806:3;2802:11;2798:19;2790:6;2786:32;2775:9;2768:51;2855:2;2850;2839:9;2835:18;2828:30;2749:4;2887:6;2881:13;2930:6;2925:2;2914:9;2910:18;2903:34;2989:6;2984:2;2976:6;2972:15;2967:2;2956:9;2952:18;2946:50;3045:1;3040:2;3031:6;3020:9;3016:22;3012:31;3005:42;3115:2;3108;3104:7;3099:2;3091:6;3087:15;3083:29;3072:9;3068:45;3064:54;3056:62;;;2611:513;;;;;:::o;3129:277::-;3196:6;3249:2;3237:9;3228:7;3224:23;3220:32;3217:52;;;3265:1;3262;3255:12;3217:52;3297:9;3291:16;3350:5;3343:13;3336:21;3329:5;3326:32;3316:60;;3372:1;3369;3362:12;6017:301;6146:3;6184:6;6178:13;6230:6;6223:4;6215:6;6211:17;6206:3;6200:37;6292:1;6256:16;;6281:13;;;-1:-1:-1;6256:16:136;6017:301;-1:-1:-1;6017:301:136:o",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"./WitnetProxy.sol\";\r\nimport \"../libs/Create3.sol\";\r\n\r\n/// @notice WitnetDeployerNoChecks contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, \r\n/// @notice and CREATE3 (EIP-3171) factory for Witnet proxies. \r\n/// @dev To be used on EVM chains where contract deployment takes place in a deferred way: \r\n/// @dev - after the deployment tx gets mined, and not while it gets executed.\r\n/// @author Guillermo Díaz <guillermo@witnet.io>\r\n\r\ncontract WitnetDeployerDeferred {\r\n\r\n    /// @notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \r\n    /// @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\r\n    /// @dev nor the nonce of the caller (i.e. see EIP-1014). \r\n    /// @param _initCode Creation code, including construction logic and input parameters.\r\n    /// @param _salt Arbitrary value to modify resulting address.\r\n    /// @return _deployed Just deployed contract address.\r\n    function deploy(bytes memory _initCode, bytes32 _salt)\r\n        virtual public\r\n        returns (address _deployed)\r\n    {\r\n        _deployed = determineAddr(_initCode, _salt);\r\n        if (_deployed.code.length == 0) {\r\n            assembly {\r\n                _deployed := create2(0, add(_initCode, 0x20), mload(_initCode), _salt)\r\n            }\r\n        }\r\n    }\r\n\r\n    /// @notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\r\n    /// @param _initCode Creation code, including construction logic and input parameters.\r\n    /// @param _salt Arbitrary value to modify resulting address.\r\n    /// @return Deterministic contract address.\r\n    function determineAddr(bytes memory _initCode, bytes32 _salt)\r\n        virtual public view\r\n        returns (address)\r\n    {\r\n        return address(\r\n            uint160(uint(keccak256(\r\n                abi.encodePacked(\r\n                    bytes1(0xff),\r\n                    address(this),\r\n                    _salt,\r\n                    keccak256(_initCode)\r\n                )\r\n            )))\r\n        );\r\n    }\r\n\r\n    function determineProxyAddr(bytes32 _salt) \r\n        virtual public view\r\n        returns (address)\r\n    {\r\n        return Create3.determineAddr(_salt);\r\n    }\r\n\r\n    function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData)\r\n        virtual external \r\n        returns (WitnetProxy)\r\n    {\r\n        address _proxyAddr = determineProxyAddr(_proxySalt);\r\n        if (_proxyAddr.code.length == 0) {\r\n            // deploy the WitnetProxy\r\n            Create3.deploy(_proxySalt, type(WitnetProxy).creationCode);\r\n            // settle first implementation address,\r\n            WitnetProxy(payable(_proxyAddr)).upgradeTo(\r\n                _firstImplementation, \r\n                // and initialize it, providing\r\n                abi.encode(\r\n                    // the owner (i.e. the caller of this function)\r\n                    msg.sender,\r\n                    // and some (optional) initialization data\r\n                     _initData\r\n                )\r\n            );\r\n            return WitnetProxy(payable(_proxyAddr));\r\n        } else {\r\n            revert(\"WitnetDeployerDeferred: already proxified\");\r\n        }\r\n    }\r\n\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\WitnetDeployerDeferred.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/WitnetDeployerDeferred.sol",
    "exportedSymbols": {
      "Create3": [
        31519
      ],
      "ERC165": [
        616
      ],
      "IERC165": [
        628
      ],
      "Initializable": [
        267
      ],
      "Proxiable": [
        45810
      ],
      "Upgradeable": [
        45930
      ],
      "WitnetDeployerDeferred": [
        8680
      ],
      "WitnetProxy": [
        8994
      ]
    },
    "id": 8681,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8535,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:31:23"
      },
      {
        "absolutePath": "project:/contracts/core/WitnetProxy.sol",
        "file": "./WitnetProxy.sol",
        "id": 8536,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8681,
        "sourceUnit": 8995,
        "src": "70:27:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/libs/Create3.sol",
        "file": "../libs/Create3.sol",
        "id": 8537,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 8681,
        "sourceUnit": 31520,
        "src": "99:29:23",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "WitnetDeployerDeferred",
        "contractDependencies": [
          8994
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 8538,
          "nodeType": "StructuredDocumentation",
          "src": "132:397:23",
          "text": "@notice WitnetDeployerNoChecks contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, \n @notice and CREATE3 (EIP-3171) factory for Witnet proxies. \n @dev To be used on EVM chains where contract deployment takes place in a deferred way: \n @dev - after the deployment tx gets mined, and not while it gets executed.\n @author Guillermo Díaz <guillermo@witnet.io>"
        },
        "fullyImplemented": true,
        "id": 8680,
        "linearizedBaseContracts": [
          8680
        ],
        "name": "WitnetDeployerDeferred",
        "nameLocation": "540:22:23",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8563,
              "nodeType": "Block",
              "src": "1204:243:23",
              "statements": [
                {
                  "expression": {
                    "id": 8553,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 8548,
                      "name": "_deployed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8546,
                      "src": "1215:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 8550,
                          "name": "_initCode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8541,
                          "src": "1241:9:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 8551,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8543,
                          "src": "1252:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 8549,
                        "name": "determineAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8602,
                        "src": "1227:13:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes memory,bytes32) view returns (address)"
                        }
                      },
                      "id": 8552,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1227:31:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1215:43:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8554,
                  "nodeType": "ExpressionStatement",
                  "src": "1215:43:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 8555,
                          "name": "_deployed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8546,
                          "src": "1273:9:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 8556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1283:4:23",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "1273:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 8557,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1288:6:23",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1273:21:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1298:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1273:26:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8562,
                  "nodeType": "IfStatement",
                  "src": "1269:171:23",
                  "trueBody": {
                    "id": 8561,
                    "nodeType": "Block",
                    "src": "1301:139:23",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1325:104:23",
                          "nodeType": "YulBlock",
                          "src": "1325:104:23",
                          "statements": [
                            {
                              "nativeSrc": "1344:70:23",
                              "nodeType": "YulAssignment",
                              "src": "1344:70:23",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1365:1:23",
                                    "nodeType": "YulLiteral",
                                    "src": "1365:1:23",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_initCode",
                                        "nativeSrc": "1372:9:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "1372:9:23"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1383:4:23",
                                        "nodeType": "YulLiteral",
                                        "src": "1383:4:23",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "1368:3:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "1368:3:23"
                                    },
                                    "nativeSrc": "1368:20:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1368:20:23"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_initCode",
                                        "nativeSrc": "1396:9:23",
                                        "nodeType": "YulIdentifier",
                                        "src": "1396:9:23"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "1390:5:23",
                                      "nodeType": "YulIdentifier",
                                      "src": "1390:5:23"
                                    },
                                    "nativeSrc": "1390:16:23",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1390:16:23"
                                  },
                                  {
                                    "name": "_salt",
                                    "nativeSrc": "1408:5:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "1408:5:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "create2",
                                  "nativeSrc": "1357:7:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1357:7:23"
                                },
                                "nativeSrc": "1357:57:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1357:57:23"
                              },
                              "variableNames": [
                                {
                                  "name": "_deployed",
                                  "nativeSrc": "1344:9:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1344:9:23"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "prague",
                        "externalReferences": [
                          {
                            "declaration": 8546,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1344:9:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 8541,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1372:9:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 8541,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1396:9:23",
                            "valueSize": 1
                          },
                          {
                            "declaration": 8543,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1408:5:23",
                            "valueSize": 1
                          }
                        ],
                        "id": 8560,
                        "nodeType": "InlineAssembly",
                        "src": "1316:113:23"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 8539,
              "nodeType": "StructuredDocumentation",
              "src": "572:505:23",
              "text": "@notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \n @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\n @dev nor the nonce of the caller (i.e. see EIP-1014). \n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return _deployed Just deployed contract address."
            },
            "functionSelector": "4af63f02",
            "id": 8564,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nameLocation": "1092:6:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8544,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8541,
                  "mutability": "mutable",
                  "name": "_initCode",
                  "nameLocation": "1112:9:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8564,
                  "src": "1099:22:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8540,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1099:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8543,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "1131:5:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8564,
                  "src": "1123:13:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8542,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1123:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1098:39:23"
            },
            "returnParameters": {
              "id": 8547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8546,
                  "mutability": "mutable",
                  "name": "_deployed",
                  "nameLocation": "1188:9:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8564,
                  "src": "1180:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8545,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1180:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1179:19:23"
            },
            "scope": 8680,
            "src": "1083:364:23",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8601,
              "nodeType": "Block",
              "src": "1916:294:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "hexValue": "30786666",
                                            "id": 8585,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2043:4:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_255_by_1",
                                              "typeString": "int_const 255"
                                            },
                                            "value": "0xff"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_255_by_1",
                                              "typeString": "int_const 255"
                                            }
                                          ],
                                          "id": 8584,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2036:6:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bytes1_$",
                                            "typeString": "type(bytes1)"
                                          },
                                          "typeName": {
                                            "id": 8583,
                                            "name": "bytes1",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2036:6:23",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 8586,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2036:12:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 8589,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967268,
                                            "src": "2079:4:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_WitnetDeployerDeferred_$8680",
                                              "typeString": "contract WitnetDeployerDeferred"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_WitnetDeployerDeferred_$8680",
                                              "typeString": "contract WitnetDeployerDeferred"
                                            }
                                          ],
                                          "id": 8588,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "2071:7:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 8587,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "2071:7:23",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 8590,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2071:13:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 8591,
                                        "name": "_salt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8569,
                                        "src": "2107:5:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 8593,
                                            "name": "_initCode",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 8567,
                                            "src": "2145:9:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "id": 8592,
                                          "name": "keccak256",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967288,
                                          "src": "2135:9:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 8594,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2135:20:23",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "expression": {
                                        "id": 8581,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967295,
                                        "src": "1997:3:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 8582,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "2001:12:23",
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "1997:16:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 8595,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1997:177:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 8580,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967288,
                                  "src": "1969:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 8596,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1969:220:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 8579,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1964:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 8578,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "1964:4:23",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1964:226:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1956:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": {
                            "id": 8576,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "1956:7:23",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 8598,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1956:235:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 8575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1934:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 8574,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1934:7:23",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 8599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1934:268:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8573,
                  "id": 8600,
                  "nodeType": "Return",
                  "src": "1927:275:23"
                }
              ]
            },
            "documentation": {
              "id": 8565,
              "nodeType": "StructuredDocumentation",
              "src": "1455:332:23",
              "text": "@notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return Deterministic contract address."
            },
            "functionSelector": "d3933c29",
            "id": 8602,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineAddr",
            "nameLocation": "1802:13:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8567,
                  "mutability": "mutable",
                  "name": "_initCode",
                  "nameLocation": "1829:9:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8602,
                  "src": "1816:22:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8566,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1816:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8569,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "1848:5:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8602,
                  "src": "1840:13:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8568,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1840:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1815:39:23"
            },
            "returnParameters": {
              "id": 8573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8572,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8602,
                  "src": "1902:7:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8571,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1902:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1901:9:23"
            },
            "scope": 8680,
            "src": "1793:417:23",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8614,
              "nodeType": "Block",
              "src": "2323:54:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 8611,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8604,
                        "src": "2363:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 8609,
                        "name": "Create3",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31519,
                        "src": "2341:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Create3_$31519_$",
                          "typeString": "type(library Create3)"
                        }
                      },
                      "id": 8610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2349:13:23",
                      "memberName": "determineAddr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31518,
                      "src": "2341:21:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 8612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2341:28:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 8608,
                  "id": 8613,
                  "nodeType": "Return",
                  "src": "2334:35:23"
                }
              ]
            },
            "functionSelector": "4998f038",
            "id": 8615,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineProxyAddr",
            "nameLocation": "2227:18:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8605,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8604,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "2254:5:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8615,
                  "src": "2246:13:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8603,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2246:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2245:15:23"
            },
            "returnParameters": {
              "id": 8608,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8607,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8615,
                  "src": "2309:7:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8606,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2309:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2308:9:23"
            },
            "scope": 8680,
            "src": "2218:159:23",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8678,
              "nodeType": "Block",
              "src": "2539:836:23",
              "statements": [
                {
                  "assignments": [
                    8628
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8628,
                      "mutability": "mutable",
                      "name": "_proxyAddr",
                      "nameLocation": "2558:10:23",
                      "nodeType": "VariableDeclaration",
                      "scope": 8678,
                      "src": "2550:18:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8627,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2550:7:23",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 8632,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 8630,
                        "name": "_proxySalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8617,
                        "src": "2590:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 8629,
                      "name": "determineProxyAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8615,
                      "src": "2571:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 8631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2571:30:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2550:51:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 8633,
                          "name": "_proxyAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8628,
                          "src": "2616:10:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 8634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2627:4:23",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "2616:15:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 8635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2632:6:23",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2616:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 8636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2642:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2616:27:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 8676,
                    "nodeType": "Block",
                    "src": "3290:78:23",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "5769746e65744465706c6f79657244656665727265643a20616c72656164792070726f786966696564",
                              "id": 8673,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3312:43:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9242d5773420af7dd596b21ade08be4a57ab076ed82064b6d6486302e44bdb4c",
                                "typeString": "literal_string \"WitnetDeployerDeferred: already proxified\""
                              },
                              "value": "WitnetDeployerDeferred: already proxified"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_9242d5773420af7dd596b21ade08be4a57ab076ed82064b6d6486302e44bdb4c",
                                "typeString": "literal_string \"WitnetDeployerDeferred: already proxified\""
                              }
                            ],
                            "id": 8672,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967277,
                              4294967277
                            ],
                            "referencedDeclaration": 4294967277,
                            "src": "3305:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 8674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3305:51:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8675,
                        "nodeType": "ExpressionStatement",
                        "src": "3305:51:23"
                      }
                    ]
                  },
                  "id": 8677,
                  "nodeType": "IfStatement",
                  "src": "2612:756:23",
                  "trueBody": {
                    "id": 8671,
                    "nodeType": "Block",
                    "src": "2645:639:23",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8641,
                              "name": "_proxySalt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8617,
                              "src": "2714:10:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 8643,
                                    "name": "WitnetProxy",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8994,
                                    "src": "2731:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$8994_$",
                                      "typeString": "type(contract WitnetProxy)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$8994_$",
                                      "typeString": "type(contract WitnetProxy)"
                                    }
                                  ],
                                  "id": 8642,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967269,
                                  "src": "2726:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 8644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2726:17:23",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$8994",
                                  "typeString": "type(contract WitnetProxy)"
                                }
                              },
                              "id": 8645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "2744:12:23",
                              "memberName": "creationCode",
                              "nodeType": "MemberAccess",
                              "src": "2726:30:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 8638,
                              "name": "Create3",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31519,
                              "src": "2699:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Create3_$31519_$",
                                "typeString": "type(library Create3)"
                              }
                            },
                            "id": 8640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2707:6:23",
                            "memberName": "deploy",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 31400,
                            "src": "2699:14:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                              "typeString": "function (bytes32,bytes memory) returns (address)"
                            }
                          },
                          "id": 8646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2699:58:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 8647,
                        "nodeType": "ExpressionStatement",
                        "src": "2699:58:23"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8655,
                              "name": "_firstImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8619,
                              "src": "2886:20:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 8658,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "3077:3:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 8659,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3081:6:23",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3077:10:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 8660,
                                  "name": "_initData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8621,
                                  "src": "3175:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 8656,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "2975:3:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 8657,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "2979:6:23",
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "2975:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 8661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2975:228:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 8651,
                                      "name": "_proxyAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 8628,
                                      "src": "2845:10:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 8650,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2837:8:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_payable_$",
                                      "typeString": "type(address payable)"
                                    },
                                    "typeName": {
                                      "id": 8649,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2837:8:23",
                                      "stateMutability": "payable",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 8652,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2837:19:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 8648,
                                "name": "WitnetProxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8994,
                                "src": "2825:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$8994_$",
                                  "typeString": "type(contract WitnetProxy)"
                                }
                              },
                              "id": 8653,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2825:32:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_WitnetProxy_$8994",
                                "typeString": "contract WitnetProxy"
                              }
                            },
                            "id": 8654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2858:9:23",
                            "memberName": "upgradeTo",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8984,
                            "src": "2825:42:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,bytes memory) external returns (bool)"
                            }
                          },
                          "id": 8662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2825:393:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8663,
                        "nodeType": "ExpressionStatement",
                        "src": "2825:393:23"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 8667,
                                  "name": "_proxyAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8628,
                                  "src": "3260:10:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 8666,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3252:8:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 8665,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3252:8:23",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8668,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3252:19:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 8664,
                            "name": "WitnetProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8994,
                            "src": "3240:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$8994_$",
                              "typeString": "type(contract WitnetProxy)"
                            }
                          },
                          "id": 8669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3240:32:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_WitnetProxy_$8994",
                            "typeString": "contract WitnetProxy"
                          }
                        },
                        "functionReturnParameters": 8626,
                        "id": 8670,
                        "nodeType": "Return",
                        "src": "3233:39:23"
                      }
                    ]
                  }
                }
              ]
            },
            "functionSelector": "5ba489e7",
            "id": 8679,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proxify",
            "nameLocation": "2394:7:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8622,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8617,
                  "mutability": "mutable",
                  "name": "_proxySalt",
                  "nameLocation": "2410:10:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8679,
                  "src": "2402:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 8616,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2402:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8619,
                  "mutability": "mutable",
                  "name": "_firstImplementation",
                  "nameLocation": "2430:20:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8679,
                  "src": "2422:28:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2422:7:23",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8621,
                  "mutability": "mutable",
                  "name": "_initData",
                  "nameLocation": "2465:9:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 8679,
                  "src": "2452:22:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 8620,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2452:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2401:74:23"
            },
            "returnParameters": {
              "id": 8626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8625,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 8679,
                  "src": "2521:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_WitnetProxy_$8994",
                    "typeString": "contract WitnetProxy"
                  },
                  "typeName": {
                    "id": 8624,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 8623,
                      "name": "WitnetProxy",
                      "nameLocations": [
                        "2521:11:23"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 8994,
                      "src": "2521:11:23"
                    },
                    "referencedDeclaration": 8994,
                    "src": "2521:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_WitnetProxy_$8994",
                      "typeString": "contract WitnetProxy"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2520:13:23"
            },
            "scope": 8680,
            "src": "2385:990:23",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          }
        ],
        "scope": 8681,
        "src": "531:2849:23",
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "src": "35:3345:23"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.30+commit.73712a01.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-10-15T14:34:45.459Z",
  "devdoc": {
    "author": "Guillermo Díaz <guillermo@witnet.io>",
    "details": "To be used on EVM chains where contract deployment takes place in a deferred way: - after the deployment tx gets mined, and not while it gets executed.",
    "kind": "dev",
    "methods": {
      "deploy(bytes,bytes32)": {
        "details": "The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). ",
        "params": {
          "_initCode": "Creation code, including construction logic and input parameters.",
          "_salt": "Arbitrary value to modify resulting address."
        },
        "returns": {
          "_deployed": "Just deployed contract address."
        }
      },
      "determineAddr(bytes,bytes32)": {
        "params": {
          "_initCode": "Creation code, including construction logic and input parameters.",
          "_salt": "Arbitrary value to modify resulting address."
        },
        "returns": {
          "_0": "Deterministic contract address."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "deploy(bytes,bytes32)": {
        "notice": "Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. "
      },
      "determineAddr(bytes,bytes32)": {
        "notice": "Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`."
      }
    },
    "notice": "WitnetDeployerNoChecks contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, and CREATE3 (EIP-3171) factory for Witnet proxies. ",
    "version": 1
  }
}