{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_localDomain",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "messageHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "leafIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "destinationAndNonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "committedRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32[2]",
          "name": "newRoot",
          "type": "bytes32[2]"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature2",
          "type": "bytes"
        }
      ],
      "name": "DoubleUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "ImproperUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldUpdater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newUpdater",
          "type": "address"
        }
      ],
      "name": "NewUpdater",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updaterManager",
          "type": "address"
        }
      ],
      "name": "NewUpdaterManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "homeDomain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "Update",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "updater",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reporter",
          "type": "address"
        }
      ],
      "name": "UpdaterSlashed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_MESSAGE_BODY_BYTES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[2]",
          "name": "_newRoot",
          "type": "bytes32[2]"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_signature2",
          "type": "bytes"
        }
      ],
      "name": "doubleUpdate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "homeDomainHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "improperUpdate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IUpdaterManager",
          "name": "_updaterManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_item",
          "type": "bytes32"
        }
      ],
      "name": "queueContains",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "queueEnd",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "queueLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "root",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        }
      ],
      "name": "setUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updaterManager",
          "type": "address"
        }
      ],
      "name": "setUpdaterManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suggestUpdate",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_new",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tree",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "update",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updater",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updaterManager",
      "outputs": [
        {
          "internalType": "contract IUpdaterManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b50604051612f69380380612f698339818101604052602081101561003357600080fd5b505160e081901b6001600160e01b03191660805263ffffffff16612ef6610073600039806109875280610a685280610ffc52806115ed5250612ef66000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639df6c8e1116100ee578063df034cd011610097578063f6d1610211610071578063f6d16102146105fc578063fa31de0114610604578063fd54b228146106bc578063ffa1ad74146106c4576101ae565b8063df034cd0146105b9578063ebf0c717146105c1578063f2fde38b146105c9576101ae565b8063b95a2001116100c8578063b95a20011461053a578063c19d93fb1461055d578063c4d66de814610586576101ae565b80639df6c8e114610478578063ab91c7b014610480578063b31c01fb14610488576101ae565b806367a6771d1161015b5780638da5cb5b116101355780638da5cb5b1461032f5780638e4e30e0146103605780639776120e146104125780639d54f41914610445576101ae565b806367a6771d146102fe578063715018a6146103065780638d3638f41461030e576101ae565b806336e104de1161018c57806336e104de146102cd57806345630b1a146102ee578063522ae002146102f6576101ae565b806306661abd146101b357806319d9d21a146101cd5780632bef28921461029c575b600080fd5b6101bb6106e2565b60408051918252519081900360200190f35b61029a600480360360a08110156101e357600080fd5b813591602081019181019060808101606082013564010000000081111561020957600080fd5b82018360208201111561021b57600080fd5b8035906020019184600183028401116401000000008311171561023d57600080fd5b91939092909160208101903564010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b5090925090506106e8565b005b6102b9600480360360208110156102b257600080fd5b5035610945565b604080519115158252519081900360200190f35b6102d5610958565b6040805192835260208301919091528051918290030190f35b6101bb610980565b6101bb6109b0565b6101bb6109b6565b61029a6109bc565b610316610a66565b6040805163ffffffff9092168252519081900360200190f35b610337610a8a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102b96004803603606081101561037657600080fd5b81359160208101359181019060608101604082013564010000000081111561039d57600080fd5b8201836020820111156103af57600080fd5b803590602001918460018302840111640100000000831117156103d157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610aa6945050505050565b61029a6004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cf9565b61029a6004803603602081101561045b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e27565b610337610ef9565b6101bb610f16565b61029a6004803603606081101561049e57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460018302840111640100000000831117156104f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f22945050505050565b6103166004803603602081101561055057600080fd5b503563ffffffff166110c0565b6105656110d9565b6040518082600281111561057557fe5b815260200191505060405180910390f35b61029a6004803603602081101561059c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110fa565b6103376112be565b6101bb6112da565b61029a600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112e6565b6101bb611488565b61029a6004803603606081101561061a57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561064757600080fd5b82018360208201111561065957600080fd5b8035906020019184600183028401116401000000008311171561067b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611494945050505050565b6101bb61170a565b6106cc611710565b6040805160ff9092168252519081900360200190f35b60545490565b600260ea5474010000000000000000000000000000000000000000900460ff16600281111561071357fe5b141561078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516020601f86018190048102820181019092528481526107c2918891883591889088908190840183828082843760009201919091525061171592505050565b8015610811575061081186866001602002013584848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061171592505050565b801561082257508435602086013514155b1561093d5761082f6117a7565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f8686868686866040518087815260200186600260200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910182810360409081018252810186905290506020810160608201878780828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910184810383528581526020019050858580828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039a509098505050505050505050a15b505050505050565b60006109526001836118ba565b92915050565b600080610965600161192a565b1561097c5760eb549150610979600161196a565b90505b9091565b60006109ab7f00000000000000000000000000000000000000000000000000000000000000006119a7565b905090565b61080081565b60eb5481565b6109c4611a1c565b73ffffffffffffffffffffffffffffffffffffffff166109e2610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610a6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60b85473ffffffffffffffffffffffffffffffffffffffff1690565b6000600260ea5474010000000000000000000000000000000000000000900460ff166002811115610ad357fe5b1415610b4057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610b4b848484611715565b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b60eb548414610c2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f7420612063757272656e7420757064617465000000000000000000000000604482015290519081900360640190fd5b610c316001846118ba565b610cee57610c3d6117a7565b7f6844fd5e21c932b5197b78ac11bf96e2eaa4e882dd0c88087060cf2065c04ab28484846040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610caa578181015183820152602001610c92565b50505050905090810190601f168015610cd75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1506001610cf2565b5060005b9392505050565b610d01611a1c565b73ffffffffffffffffffffffffffffffffffffffff16610d1f610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610da157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610daa81611a20565b610e248173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b5051611b0e565b50565b61011c5473ffffffffffffffffffffffffffffffffffffffff163314610eae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f21757064617465724d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b610eb781611b0e565b5060ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b61011c5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab600161192a565b600260ea5474010000000000000000000000000000000000000000900460ff166002811115610f4d57fe5b1415610fba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610fc5838383610aa6565b15610fcf576110bb565b6000610fdb6001611b96565b905082811415610feb5750610ff1565b50610fcf565b8160eb8190555081837f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b2846040518080602001828103825283818151815260200191508051906020019080838360005b83811015611080578181015183820152602001611068565b50505050905090810190601f1680156110ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b505050565b61011b6020526000908152604090205463ffffffff1681565b60ea5474010000000000000000000000000000000000000000900460ff1681565b600054610100900460ff16806111135750611113611ccf565b80611121575060005460ff16155b611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff161580156111dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111e4611ce0565b6111ed82611a20565b61011c54604080517fdf034cd0000000000000000000000000000000000000000000000000000000008152905161128b9273ffffffffffffffffffffffffffffffffffffffff169163df034cd0916004808301926020929190829003018186803b15801561125a57600080fd5b505afa15801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b5051611dfd565b80156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60ea5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab6034611f61565b6112ee611a1c565b73ffffffffffffffffffffffffffffffffffffffff1661130c610a8a565b73ffffffffffffffffffffffffffffffffffffffff161461138e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166113fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612e526026913960400191505060405180910390fd5b60b85460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006109ab600161196a565b600260ea5474010000000000000000000000000000000000000000900460ff1660028111156114bf57fe5b141561152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b6108008151111561159e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff808416600090815261011b602052604081208054808416600181019094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091161790556116167f00000000000000000000000000000000000000000000000000000000000000003384888888611f74565b8051602082012090915061162b60348261204a565b61163e6116366112da565b600190612152565b5061164986846121bf565b67ffffffffffffffff16600161165d6106e2565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a60eb54866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156116c75781810151838201526020016116af565b50505050905090810190601f1680156116f45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b60545481565b600081565b600080611720610980565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611761816121d9565b60ea5490915073ffffffffffffffffffffffffffffffffffffffff16611787828561222a565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905561011c54604080517f5b3c2cbf000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691635b3c2cbf9160248082019260009290919082900301818387803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b505060ea5460405133935073ffffffffffffffffffffffffffffffffffffffff90911691507f98064af315f26d7333ba107ba43a128ec74345f4d4e6f2549840fe092a1c8bce90600090a3565b81546000906fffffffffffffffffffffffffffffffff165b835470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168111610cee576000818152600185016020526040902054831415611922576001915050610952565b6001016118d2565b80546000906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911661196282826122c4565b949350505050565b805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1660009081526001909101602052604090205490565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b3390565b611a29816122de565b611a9457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f21636f6e747261637420757064617465724d616e616765720000000000000000604482015290519081900360640190fd5b61011c805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f958d788fb4c373604cd4c73aa8c592de127d0819b49bb4dc02c8ecd666e965bf9181900360200190a150565b60ea805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b80546000906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169116611bce82826122c4565b611c3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f456d707479000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6fffffffffffffffffffffffffffffffff8116600090815260018501602052604090205492508215611c8a576fffffffffffffffffffffffffffffffff811660009081526001850160205260408120555b83547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001919091016fffffffffffffffffffffffffffffffff1617909255919050565b6000611cda306122de565b15905090565b600054610100900460ff1680611cf95750611cf9611ccf565b80611d07575060005460ff16155b611d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611dcc60016122e4565b8015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680611e165750611e16611ccf565b80611e24575060005460ff16155b611e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611ee7612328565b611ef082611b0e565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b600061095282611f6f61241a565b6128db565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061200557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611fc8565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b602082015463ffffffff116120c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6d65726b6c6520747265652066756c6c00000000000000000000000000000000604482015290519081900360640190fd5b6020820180546001019081905560005b602081101561214f5781600116600114156120fc57828482602081106120f257fe5b0155506112ba9050565b83816020811061210857fe5b01548360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092506002828161214457fe5b0491506001016120d0565b50fe5b81546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009283900482166001019182169092029190911783558115610952576fffffffffffffffffffffffffffffffff8116600090815260019390930160205260409092205590565b63ffffffff1660209190911b67ffffffff00000000161790565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461229c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6122ba86828585612999565b9695505050505050565b60019103016fffffffffffffffffffffffffffffffff1690565b3b151590565b80546fffffffffffffffffffffffffffffffff16610e245780547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600117815550565b600054610100900460ff16806123415750612341611ccf565b8061234f575060005460ff16155b6123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff1615801561240a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612412612b90565b611dcc612ca2565b612422612e32565b600081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560208201527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060408201527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560608201527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460808201527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60a08201527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860c08201527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360e08201527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6101008201527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06101208201527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56101408201527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926101608201527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6101808201527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6101a08201527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6101c08201527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26101e08201527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6102008201527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6102208201527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06102408201527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06102608201527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26102808201527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96102a08201527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776102c08201527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526102e08201527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6103008201527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6103208201527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06103408201527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6103608201527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6103808201527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226103a08201527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356103c08201527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96103e082015290565b6020820154600090815b602081101561299157600182821c16600086836020811061290257fe5b0154905081600114156129455780856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209450612987565b8486846020811061295257fe5b602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012094505b50506001016128e5565b505092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612e786022913960400191505060405180910390fd5b8360ff16601b1480612a2957508360ff16601c145b612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612ec86022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ada573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600054610100900460ff1680612ba95750612ba9611ccf565b80612bb7575060005460ff16155b612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dcc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612cbb5750612cbb611ccf565b80612cc9575060005460ff16155b612d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015612d8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000612d8e611a1c565b60b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b604051806104000160405280602090602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "959:13898:17:-:0;;;4026:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4026:59:17;-1:-1:-1;2520:26:19;;;;;;;959:13898:17;;-1:-1:-1;959:13898:17;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639df6c8e1116100ee578063df034cd011610097578063f6d1610211610071578063f6d16102146105fc578063fa31de0114610604578063fd54b228146106bc578063ffa1ad74146106c4576101ae565b8063df034cd0146105b9578063ebf0c717146105c1578063f2fde38b146105c9576101ae565b8063b95a2001116100c8578063b95a20011461053a578063c19d93fb1461055d578063c4d66de814610586576101ae565b80639df6c8e114610478578063ab91c7b014610480578063b31c01fb14610488576101ae565b806367a6771d1161015b5780638da5cb5b116101355780638da5cb5b1461032f5780638e4e30e0146103605780639776120e146104125780639d54f41914610445576101ae565b806367a6771d146102fe578063715018a6146103065780638d3638f41461030e576101ae565b806336e104de1161018c57806336e104de146102cd57806345630b1a146102ee578063522ae002146102f6576101ae565b806306661abd146101b357806319d9d21a146101cd5780632bef28921461029c575b600080fd5b6101bb6106e2565b60408051918252519081900360200190f35b61029a600480360360a08110156101e357600080fd5b813591602081019181019060808101606082013564010000000081111561020957600080fd5b82018360208201111561021b57600080fd5b8035906020019184600183028401116401000000008311171561023d57600080fd5b91939092909160208101903564010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b5090925090506106e8565b005b6102b9600480360360208110156102b257600080fd5b5035610945565b604080519115158252519081900360200190f35b6102d5610958565b6040805192835260208301919091528051918290030190f35b6101bb610980565b6101bb6109b0565b6101bb6109b6565b61029a6109bc565b610316610a66565b6040805163ffffffff9092168252519081900360200190f35b610337610a8a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102b96004803603606081101561037657600080fd5b81359160208101359181019060608101604082013564010000000081111561039d57600080fd5b8201836020820111156103af57600080fd5b803590602001918460018302840111640100000000831117156103d157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610aa6945050505050565b61029a6004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cf9565b61029a6004803603602081101561045b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e27565b610337610ef9565b6101bb610f16565b61029a6004803603606081101561049e57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460018302840111640100000000831117156104f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f22945050505050565b6103166004803603602081101561055057600080fd5b503563ffffffff166110c0565b6105656110d9565b6040518082600281111561057557fe5b815260200191505060405180910390f35b61029a6004803603602081101561059c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110fa565b6103376112be565b6101bb6112da565b61029a600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112e6565b6101bb611488565b61029a6004803603606081101561061a57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561064757600080fd5b82018360208201111561065957600080fd5b8035906020019184600183028401116401000000008311171561067b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611494945050505050565b6101bb61170a565b6106cc611710565b6040805160ff9092168252519081900360200190f35b60545490565b600260ea5474010000000000000000000000000000000000000000900460ff16600281111561071357fe5b141561078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516020601f86018190048102820181019092528481526107c2918891883591889088908190840183828082843760009201919091525061171592505050565b8015610811575061081186866001602002013584848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061171592505050565b801561082257508435602086013514155b1561093d5761082f6117a7565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f8686868686866040518087815260200186600260200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910182810360409081018252810186905290506020810160608201878780828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910184810383528581526020019050858580828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039a509098505050505050505050a15b505050505050565b60006109526001836118ba565b92915050565b600080610965600161192a565b1561097c5760eb549150610979600161196a565b90505b9091565b60006109ab7f00000000000000000000000000000000000000000000000000000000000000006119a7565b905090565b61080081565b60eb5481565b6109c4611a1c565b73ffffffffffffffffffffffffffffffffffffffff166109e2610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610a6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60b85473ffffffffffffffffffffffffffffffffffffffff1690565b6000600260ea5474010000000000000000000000000000000000000000900460ff166002811115610ad357fe5b1415610b4057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610b4b848484611715565b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b60eb548414610c2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f7420612063757272656e7420757064617465000000000000000000000000604482015290519081900360640190fd5b610c316001846118ba565b610cee57610c3d6117a7565b7f6844fd5e21c932b5197b78ac11bf96e2eaa4e882dd0c88087060cf2065c04ab28484846040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610caa578181015183820152602001610c92565b50505050905090810190601f168015610cd75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1506001610cf2565b5060005b9392505050565b610d01611a1c565b73ffffffffffffffffffffffffffffffffffffffff16610d1f610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610da157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610daa81611a20565b610e248173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b5051611b0e565b50565b61011c5473ffffffffffffffffffffffffffffffffffffffff163314610eae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f21757064617465724d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b610eb781611b0e565b5060ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b61011c5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab600161192a565b600260ea5474010000000000000000000000000000000000000000900460ff166002811115610f4d57fe5b1415610fba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610fc5838383610aa6565b15610fcf576110bb565b6000610fdb6001611b96565b905082811415610feb5750610ff1565b50610fcf565b8160eb8190555081837f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b2846040518080602001828103825283818151815260200191508051906020019080838360005b83811015611080578181015183820152602001611068565b50505050905090810190601f1680156110ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b505050565b61011b6020526000908152604090205463ffffffff1681565b60ea5474010000000000000000000000000000000000000000900460ff1681565b600054610100900460ff16806111135750611113611ccf565b80611121575060005460ff16155b611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff161580156111dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111e4611ce0565b6111ed82611a20565b61011c54604080517fdf034cd0000000000000000000000000000000000000000000000000000000008152905161128b9273ffffffffffffffffffffffffffffffffffffffff169163df034cd0916004808301926020929190829003018186803b15801561125a57600080fd5b505afa15801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b5051611dfd565b80156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60ea5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab6034611f61565b6112ee611a1c565b73ffffffffffffffffffffffffffffffffffffffff1661130c610a8a565b73ffffffffffffffffffffffffffffffffffffffff161461138e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166113fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612e526026913960400191505060405180910390fd5b60b85460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006109ab600161196a565b600260ea5474010000000000000000000000000000000000000000900460ff1660028111156114bf57fe5b141561152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b6108008151111561159e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff808416600090815261011b602052604081208054808416600181019094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091161790556116167f00000000000000000000000000000000000000000000000000000000000000003384888888611f74565b8051602082012090915061162b60348261204a565b61163e6116366112da565b600190612152565b5061164986846121bf565b67ffffffffffffffff16600161165d6106e2565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a60eb54866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156116c75781810151838201526020016116af565b50505050905090810190601f1680156116f45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b60545481565b600081565b600080611720610980565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611761816121d9565b60ea5490915073ffffffffffffffffffffffffffffffffffffffff16611787828561222a565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905561011c54604080517f5b3c2cbf000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691635b3c2cbf9160248082019260009290919082900301818387803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b505060ea5460405133935073ffffffffffffffffffffffffffffffffffffffff90911691507f98064af315f26d7333ba107ba43a128ec74345f4d4e6f2549840fe092a1c8bce90600090a3565b81546000906fffffffffffffffffffffffffffffffff165b835470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168111610cee576000818152600185016020526040902054831415611922576001915050610952565b6001016118d2565b80546000906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911661196282826122c4565b949350505050565b805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1660009081526001909101602052604090205490565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b3390565b611a29816122de565b611a9457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f21636f6e747261637420757064617465724d616e616765720000000000000000604482015290519081900360640190fd5b61011c805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f958d788fb4c373604cd4c73aa8c592de127d0819b49bb4dc02c8ecd666e965bf9181900360200190a150565b60ea805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b80546000906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169116611bce82826122c4565b611c3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f456d707479000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6fffffffffffffffffffffffffffffffff8116600090815260018501602052604090205492508215611c8a576fffffffffffffffffffffffffffffffff811660009081526001850160205260408120555b83547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001919091016fffffffffffffffffffffffffffffffff1617909255919050565b6000611cda306122de565b15905090565b600054610100900460ff1680611cf95750611cf9611ccf565b80611d07575060005460ff16155b611d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611dcc60016122e4565b8015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680611e165750611e16611ccf565b80611e24575060005460ff16155b611e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611ee7612328565b611ef082611b0e565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b600061095282611f6f61241a565b6128db565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061200557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611fc8565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b602082015463ffffffff116120c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6d65726b6c6520747265652066756c6c00000000000000000000000000000000604482015290519081900360640190fd5b6020820180546001019081905560005b602081101561214f5781600116600114156120fc57828482602081106120f257fe5b0155506112ba9050565b83816020811061210857fe5b01548360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092506002828161214457fe5b0491506001016120d0565b50fe5b81546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009283900482166001019182169092029190911783558115610952576fffffffffffffffffffffffffffffffff8116600090815260019390930160205260409092205590565b63ffffffff1660209190911b67ffffffff00000000161790565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461229c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6122ba86828585612999565b9695505050505050565b60019103016fffffffffffffffffffffffffffffffff1690565b3b151590565b80546fffffffffffffffffffffffffffffffff16610e245780547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600117815550565b600054610100900460ff16806123415750612341611ccf565b8061234f575060005460ff16155b6123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff1615801561240a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612412612b90565b611dcc612ca2565b612422612e32565b600081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560208201527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060408201527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560608201527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460808201527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60a08201527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860c08201527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360e08201527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6101008201527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06101208201527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56101408201527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926101608201527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6101808201527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6101a08201527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6101c08201527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26101e08201527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6102008201527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6102208201527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06102408201527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06102608201527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26102808201527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96102a08201527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776102c08201527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526102e08201527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6103008201527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6103208201527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06103408201527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6103608201527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6103808201527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226103a08201527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356103c08201527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96103e082015290565b6020820154600090815b602081101561299157600182821c16600086836020811061290257fe5b0154905081600114156129455780856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209450612987565b8486846020811061295257fe5b602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012094505b50506001016128e5565b505092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612e786022913960400191505060405180910390fd5b8360ff16601b1480612a2957508360ff16601c145b612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612ec86022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ada573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600054610100900460ff1680612ba95750612ba9611ccf565b80612bb7575060005460ff16155b612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dcc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612cbb5750612cbb611ccf565b80612cc9575060005460ff16155b612d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015612d8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000612d8e611a1c565b60b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b604051806104000160405280602090602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "959:13898:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;885:81:18;;;:::i;:::-;;;;;;;;;;;;;;;;10420:521:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10420:521:17;;-1:-1:-1;10420:521:17;-1:-1:-1;10420:521:17;:::i;:::-;;1150:112:20;;;;;;;;;;;;;;;;-1:-1:-1;1150:112:20;;:::i;:::-;;;;;;;;;;;;;;;;;;9562:247:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11076:117;;;:::i;1287:58::-;;;:::i;1537:28:19:-;;;:::i;4488:84::-;;;:::i;1266:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1335:85:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12679:756:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12679:756:17;;-1:-1:-1;12679:756:17;;-1:-1:-1;;;;;12679:756:17:i;5800:205::-;;;;;;;;;;;;;;;;-1:-1:-1;5800:205:17;;;;:::i;5161:220::-;;;;;;;;;;;;;;;;-1:-1:-1;5161:220:17;;;;:::i;1580:37::-;;;:::i;979:93:20:-;;;:::i;8470:734:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8470:734:17;;-1:-1:-1;8470:734:17;;-1:-1:-1;;;;;8470:734:17:i;1464:39::-;;;;;;;;;;;;;;;;-1:-1:-1;1464:39:17;;;;:::i;1453:19:19:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4177:284:17;;;;;;;;;;;;;;;;-1:-1:-1;4177:284:17;;;;:::i;1392:22:19:-;;;:::i;701:81:18:-;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;1339:92:20:-;;;:::i;6511:1287:17:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6511:1287:17;;-1:-1:-1;6511:1287:17;;-1:-1:-1;;;;;6511:1287:17:i;435:26:18:-;;;:::i;171:33:22:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;885:81:18;949:10;;885:81;:::o;10420:521:17:-;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10629:64:::1;::::0;;10669:11:::1;10629:64;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;10659:8;;10669:11;::::1;::::0;10682:10;;;;;;10629:64;::::1;10682:10:::0;;;;10629:64;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;10629:29:17::1;::::0;-1:-1:-1;;;10629:64:17:i:1;:::-;:145;;;;-1:-1:-1::0;10709:65:17::1;10739:8:::0;10749;10758:1:::1;10749:11;;;;10762;;10709:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;10709:29:17::1;::::0;-1:-1:-1;;;10709:65:17:i:1;:::-;10629:187;;;;-1:-1:-1::0;10790:11:17;::::1;10805;::::0;::::1;;10790:26;;10629:187;10612:323;;;10841:7;:5;:7::i;:::-;10867:57;10880:8;10890;10900:10;;10912:11;;10867:57;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;10867:57:17::1;::::0;::::1;::::0;;;;;;;;::::1;;::::0;;::::1;::::0;::::1;;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;;::::0;-1:-1:-1;10867:57:17;;;;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;10867:57:17;;-1:-1:-1;;;;;;;;;10867:57:17::1;10612:323;10420:521:::0;;;;;;:::o;1150:112:20:-;1211:4;1234:21;:5;1249;1234:14;:21::i;:::-;1227:28;1150:112;-1:-1:-1;;1150:112:20:o;9562:247:17:-;9634:22;9658:12;9690:14;:5;:12;:14::i;:::-;:19;9686:117;;9742:13;;9725:30;;9776:16;:5;:14;:16::i;:::-;9769:23;;9686:117;9562:247;;:::o;11076:117::-;11132:7;11158:28;11174:11;11158:15;:28::i;:::-;11151:35;;11076:117;:::o;1287:58::-;1336:9;1287:58;:::o;1537:28:19:-;;;;:::o;4488:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:84:19:o;1266:35::-;;;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;12679:756:17:-;12820:4;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12857:51:::1;12877:8;12887;12897:10;12857:19;:51::i;:::-;12836:110;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12976:13;;12964:8;:25;12956:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13163:24;:5;13178:8:::0;13163:14:::1;:24::i;:::-;13158:153;;13203:7;:5;:7::i;:::-;13229:46;13244:8;13254;13264:10;13229:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13296:4:17::1;13289:11;;13158:153;-1:-1:-1::0;13423:5:17::1;4919:1;12679:756:::0;;;;;:::o;5800:205::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5881:52:17::1;5916:15;5881:18;:52::i;:::-;5943:55;5971:15;5955:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5955:42:17;5943:11:::1;:55::i;:::-;5800:205:::0;:::o;5161:220::-;4675:14;;;;4653:10;:37;4645:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:21:::1;5249:8;5237:11;:21::i;:::-;-1:-1:-1::0;5353:5:17::1;:21:::0;;;::::1;::::0;::::1;::::0;;5161:220::o;1580:37::-;;;;;;:::o;979:93:20:-;1025:7;1051:14;:5;:12;:14::i;8470:734:17:-;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8750:52:::1;8765:14;8781:8;8791:10;8750:14;:52::i;:::-;8746:65;;;8804:7;;8746:65;8934:13;8950:15;:5;:13;:15::i;:::-;8934:31;;8992:8;8983:5;:17;8979:28;;;9002:5;;;8979:28;8907:111;;;;9117:8;9101:13;:24;;;;9176:8;9160:14;9147:11;9140:57;;;9186:10;9140:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4919:1;8470:734:::0;;;:::o;1464:39::-;;;;;;;;;;;;;;;:::o;1453:19:19:-;;;;;;;;;:::o;4177:284:17:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;4324:27:17::1;:25;:27::i;:::-;4361:35;4380:15;4361:18;:35::i;:::-;4429:14;::::0;:24:::1;::::0;;;;;;;4406:48:::1;::::0;4429:14:::1;;::::0;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:14;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4429:24:17;4406:22:::1;:48::i;:::-;1794:14:8::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;4177:284:17;;:::o;1392:22:19:-;;;;;;:::o;701:81:18:-;738:7;764:11;:4;:9;:11::i;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;1339:92:20:-;1382:7;1408:16;:5;:14;:16::i;6511:1287:17:-;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1336:9:::1;6677:12;:19;:45;;6669:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6841:26;::::0;;::::1;6825:13;6841:26:::0;;;:6:::1;:26;::::0;;;;;;;;::::1;::::0;6906:10;::::1;6877:39:::0;;::::1;::::0;;;::::1;;::::0;;6998:216:::1;7033:11;7082:10;6841:26:::0;6848:18;7161:17;7192:12;6998:21:::1;:216::i;:::-;7305:19:::0;;::::1;::::0;::::1;::::0;6974:240;;-1:-1:-1;7334:25:17::1;:4;7305:19:::0;7334:11:::1;:25::i;:::-;7436:21;7450:6;:4;:6::i;:::-;7436:5;::::0;:13:::1;:21::i;:::-;;7684:48;7705:18;7725:6;7684:20;:48::i;:::-;7611:180;;7669:1;7659:7;:5;:7::i;:::-;:11;7633:12;7611:180;7746:13;;7773:8;7611:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4919:1;;;6511:1287:::0;;;:::o;435:26:18:-;;;;:::o;171:33:22:-;203:1;171:33;:::o;3903:392:19:-;4046:4;4062:15;4120:16;:14;:16::i;:::-;4138:8;4148;4103:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4080:87;;;;;;4062:105;;4187:37;4216:7;4187:28;:37::i;:::-;4280:7;;4177:47;;-1:-1:-1;4280:7:19;;4242:34;4177:47;4265:10;4242:13;:34::i;:::-;:45;;;;3903:392;-1:-1:-1;;;;;3903:392:19:o;14091:222:17:-;14161:5;:21;;;;;;;;14217:14;;:39;;;;;;14245:10;14217:39;;;;;;:14;;;;;:27;;:39;;;;;-1:-1:-1;;14217:39:17;;;;;;;;-1:-1:-1;14217:14:17;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14286:7:17;;14271:35;;14295:10;;-1:-1:-1;14271:35:17;14286:7;;;;-1:-1:-1;14271:35:17;;14286:7;;14271:35;14091:222::o;3510:286:28:-;3645:8;;3608:4;;3645:8;;3628:140;3660:7;;;;;;;3655:12;;3628:140;;3692:11;;;;:8;;;:11;;;;;;:20;;3688:70;;;3739:4;3732:11;;;;;3688:70;3669:3;;3628:140;;4514:234;4606:7;;4571;;4606;;;;;;;4640:8;4719:22;4606:7;4640:8;4719:7;:22::i;:::-;4712:29;4514:234;-1:-1:-1;;;;4514:234:28:o;3892:109::-;3986:7;;;;;;;3951;3977:17;;;:8;;;;:17;;;;;;;3892:109::o;3155:178:19:-;3287:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3277:49;;;;;;3155:178::o;828:104:10:-;915:10;828:104;:::o;13609:319:17:-;13710:44;13737:15;13710:18;:44::i;:::-;13689:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13814:14;:49;;;;;;;;;;;;;;13878:43;;;;;;;;;;;;;;;;13609:319;:::o;3439:179:19:-;3522:7;;;;3539:21;;;;;;;;;;;3575:36;;;3522:7;;;;3575:36;;;;;;;;;;;;;;;;;;;;;;;3439:179;;:::o;1458:391:28:-;1552:7;;1511:13;;1552:7;;;;;;;1586:8;1612:22;1552:7;1586:8;1612:7;:22::i;:::-;1604:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1667:16;;;;;;;:8;;;:16;;;;;;;-1:-1:-1;1697:19:28;;1693:119;;1785:16;;;;;;;:8;;;:16;;;;;1778:23;1693:119;1821:21;;;;1841:1;1832:10;;;;1821:21;;;;;;1458:391;;-1:-1:-1;1458:391:28:o;1952:123:8:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;762:93:20:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;830:18:20::1;:5;:16;:18::i;:::-;1794:14:8::0;1790:66;;;1840:5;1824:21;;;;;;762:93:20;:::o;2605:166:19:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;2686:16:19::1;:14;:16::i;:::-;2712:21;2724:8;2712:11;:21::i;:::-;2743:5;:21:::0;;;::::1;::::0;::::1;::::0;;1790:66:8;;;;1840:5;1824:21;;;;;;2605:166:19;;:::o;2293:122:26:-;2350:7;2376:32;2388:5;2395:12;:10;:12::i;:::-;2376:11;:32::i;979:482:27:-;1207:12;1284:13;1315:7;1340:6;1364:18;1400:10;1428:12;1250:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1231:223;;979:482;;;;;;;;:::o;799:648:26:-;340:2;877:11;;;387:17;-1:-1:-1;869:53:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;933:11;;;:16;;948:1;933:16;;;;;:11;995:262;340:2;1015:1;:14;995:262;;;1055:4;1062:1;1055:8;1068:1;1054:15;1050:101;;;1107:5;1089;1102:1;1089:15;;;;;;;;:23;-1:-1:-1;1130:7:26;;-1:-1:-1;1130:7:26;1050:101;1199:5;1212:1;1199:15;;;;;;;;;1216:5;1182:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1172:51;;;;;;1164:59;;1245:1;1237:9;;;;;;;;-1:-1:-1;1031:3:26;;995:262;;;-1:-1:-1;1427:13:26;1006:291:28;1127:7;;;1148:15;;;1127:7;;;;;;;1137:1;1127:11;1148:15;;;;;;;;;;;;1177:19;;1173:118;;1257:15;;;;;;;:8;;;;;:15;;;;;;:23;:15;1006:291::o;14669:186:17:-;14811:37;;14836:2;14812:26;;;;;;14811:37;;14669:186::o;3638:265:12:-;3837:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:69;;;;;;3638:265::o;1072:740::-;1150:7;1211:9;:16;1231:2;1211:22;1207:94;;1249:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:94;1651:4;1636:20;;1630:27;1696:4;1681:20;;1675:27;1749:4;1734:20;;1728:27;1367:9;1720:36;1783:22;1791:4;1720:36;1630:27;1675;1783:7;:22::i;:::-;1776:29;1072:740;-1:-1:-1;;;;;;1072:740:12:o;4844:159:28:-;4985:1;4977:18;;;4969:27;;;4844:159::o;726:413:13:-;1086:20;1124:8;;;726:413::o;719:119:28:-;780:8;;;;776:56;;809:12;;;;820:1;809:12;;;719:119;:::o;935:126:7:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;2533:992:26:-:0;2602:34;;:::i;:::-;2665:3;2652:16;;2691:3;2652:10;2678;;:16;2717:3;2704:10;;;:16;2743:3;2730:10;;;:16;2769:3;2756:10;;;:16;2795:3;2782:10;;;:16;2821:3;2808:10;;;:16;2847:3;2834:10;;;:16;2873:3;2860:10;;;:16;2899:3;2886:10;;;:16;2926:4;2912:11;;;:18;2954:4;2940:11;;;:18;2982:4;2968:11;;;:18;3010:4;2996:11;;;:18;3038:4;3024:11;;;:18;3066:4;3052:11;;;:18;3094:4;3080:11;;;:18;3122:4;3108:11;;;:18;3150:4;3136:11;;;:18;3178:4;3164:11;;;:18;3206:4;3192:11;;;:18;3234:4;3220:11;;;:18;3262:4;3248:11;;;:18;3290:4;3276:11;;;:18;3318:4;3304:11;;;:18;3346:4;3332:11;;;:18;3374:4;3360:11;;;:18;3402:4;3388:11;;;:18;3430:4;3416:11;;;:18;3458:4;3444:11;;;:18;3486:4;3472:11;;;:18;3514:4;3500:11;;;:18;2652:7;2533:992::o;1658:568::-;1831:11;;;;1782:16;;;1853:367;340:2;1873:1;:14;1853:367;;;1942:4;1927:11;;;1926:20;1908:15;1976:5;1937:1;1976:15;;;;;;;;;1960:31;;2009:7;2020:1;2009:12;2005:205;;;2079:5;2086:8;2062:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2052:44;;;;;;2041:55;;2005:205;;;2173:8;2183:7;2191:1;2183:10;;;;;;;;;;;2156:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2146:49;;;;;;2135:60;;2005:205;-1:-1:-1;;1889:3:26;;1853:367;;;;1658:568;;;;;:::o;1960:1414:12:-;2045:7;2960:66;2946:80;;;2938:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;:7;;3088:2;3083:7;:18;;;;3094:1;:7;;3099:2;3094:7;3083:18;3075:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:14;3252:24;3262:4;3268:1;3271;3274;3252:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3252:24:12;;;;;;-1:-1:-1;;3294:20:12;;;3286:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3361:6;1960:1414;-1:-1:-1;;;;;1960:1414:12:o;759:64:10:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:10;:::o;1067:192:7:-;1512:13:8;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:8;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:8;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o",
    "linkReferences": {},
    "immutableReferences": {
      "26231": [
        {
          "start": 2439,
          "length": 32
        },
        {
          "start": 2664,
          "length": 32
        },
        {
          "start": 4092,
          "length": 32
        },
        {
          "start": 5613,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "MAX_MESSAGE_BODY_BYTES()": "522ae002",
    "VERSION()": "ffa1ad74",
    "committedRoot()": "67a6771d",
    "count()": "06661abd",
    "dispatch(uint32,bytes32,bytes)": "fa31de01",
    "doubleUpdate(bytes32,bytes32[2],bytes,bytes)": "19d9d21a",
    "homeDomainHash()": "45630b1a",
    "improperUpdate(bytes32,bytes32,bytes)": "8e4e30e0",
    "initialize(address)": "c4d66de8",
    "localDomain()": "8d3638f4",
    "nonces(uint32)": "b95a2001",
    "owner()": "8da5cb5b",
    "queueContains(bytes32)": "2bef2892",
    "queueEnd()": "f6d16102",
    "queueLength()": "ab91c7b0",
    "renounceOwnership()": "715018a6",
    "root()": "ebf0c717",
    "setUpdater(address)": "9d54f419",
    "setUpdaterManager(address)": "9776120e",
    "state()": "c19d93fb",
    "suggestUpdate()": "36e104de",
    "transferOwnership(address)": "f2fde38b",
    "tree()": "fd54b228",
    "update(bytes32,bytes32,bytes)": "b31c01fb",
    "updater()": "df034cd0",
    "updaterManager()": "9df6c8e1"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/Home.sol",
    "id": 26175,
    "exportedSymbols": {
      "Address": [
        24045
      ],
      "Home": [
        26174
      ],
      "IUpdaterManager": [
        27431
      ],
      "MerkleLib": [
        27988
      ],
      "MerkleTreeManager": [
        26210
      ],
      "Message": [
        28215
      ],
      "NomadBase": [
        26382
      ],
      "QueueLib": [
        28625
      ],
      "QueueManager": [
        26448
      ],
      "Version0": [
        27006
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:14812:17",
    "nodes": [
      {
        "id": 25623,
        "nodeType": "PragmaDirective",
        "src": "46:22:17",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 25625,
        "nodeType": "ImportDirective",
        "src": "116:40:17",
        "absolutePath": "packages/contracts-core/contracts/Version0.sol",
        "file": "./Version0.sol",
        "scope": 26175,
        "sourceUnit": 27007,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25624,
              "name": "Version0",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:8:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25627,
        "nodeType": "ImportDirective",
        "src": "157:42:17",
        "absolutePath": "packages/contracts-core/contracts/NomadBase.sol",
        "file": "./NomadBase.sol",
        "scope": 26175,
        "sourceUnit": 26383,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25626,
              "name": "NomadBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "165:9:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25629,
        "nodeType": "ImportDirective",
        "src": "200:42:17",
        "absolutePath": "packages/contracts-core/contracts/libs/Queue.sol",
        "file": "./libs/Queue.sol",
        "scope": 26175,
        "sourceUnit": 28626,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25628,
              "name": "QueueLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "208:8:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25631,
        "nodeType": "ImportDirective",
        "src": "243:44:17",
        "absolutePath": "packages/contracts-core/contracts/libs/Merkle.sol",
        "file": "./libs/Merkle.sol",
        "scope": 26175,
        "sourceUnit": 27989,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25630,
              "name": "MerkleLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "251:9:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25633,
        "nodeType": "ImportDirective",
        "src": "288:43:17",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "./libs/Message.sol",
        "scope": 26175,
        "sourceUnit": 28216,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25632,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "296:7:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25635,
        "nodeType": "ImportDirective",
        "src": "332:47:17",
        "absolutePath": "packages/contracts-core/contracts/Merkle.sol",
        "file": "./Merkle.sol",
        "scope": 26175,
        "sourceUnit": 26211,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25634,
              "name": "MerkleTreeManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "340:17:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25637,
        "nodeType": "ImportDirective",
        "src": "380:41:17",
        "absolutePath": "packages/contracts-core/contracts/Queue.sol",
        "file": "./Queue.sol",
        "scope": 26175,
        "sourceUnit": 26449,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25636,
              "name": "QueueManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "388:12:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25639,
        "nodeType": "ImportDirective",
        "src": "422:65:17",
        "absolutePath": "packages/contracts-core/contracts/interfaces/IUpdaterManager.sol",
        "file": "./interfaces/IUpdaterManager.sol",
        "scope": 26175,
        "sourceUnit": 27432,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25638,
              "name": "IUpdaterManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "430:15:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 25641,
        "nodeType": "ImportDirective",
        "src": "534:66:17",
        "absolutePath": "node_modules/@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "scope": 26175,
        "sourceUnit": 24046,
        "symbolAliases": [
          {
            "foreign": {
              "id": 25640,
              "name": "Address",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "542:7:17",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 26174,
        "nodeType": "ContractDefinition",
        "src": "959:13898:17",
        "nodes": [
          {
            "id": 25653,
            "nodeType": "UsingForDirective",
            "src": "1079:34:17",
            "libraryName": {
              "id": 25651,
              "name": "QueueLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28625,
              "src": "1085:8:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_QueueLib_$28625",
                "typeString": "library QueueLib"
              }
            },
            "typeName": {
              "id": 25652,
              "name": "QueueLib.Queue",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28227,
              "src": "1098:14:17",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Queue_$28227_storage_ptr",
                "typeString": "struct QueueLib.Queue"
              }
            }
          },
          {
            "id": 25656,
            "nodeType": "UsingForDirective",
            "src": "1118:35:17",
            "libraryName": {
              "id": 25654,
              "name": "MerkleLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27988,
              "src": "1124:9:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleLib_$27988",
                "typeString": "library MerkleLib"
              }
            },
            "typeName": {
              "id": 25655,
              "name": "MerkleLib.Tree",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27451,
              "src": "1138:14:17",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Tree_$27451_storage_ptr",
                "typeString": "struct MerkleLib.Tree"
              }
            }
          },
          {
            "id": 25663,
            "nodeType": "VariableDeclaration",
            "src": "1287:58:17",
            "constant": true,
            "functionSelector": "522ae002",
            "mutability": "constant",
            "name": "MAX_MESSAGE_BODY_BYTES",
            "scope": 26174,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 25657,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1287:7:17",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_rational_2048_by_1",
                "typeString": "int_const 2048"
              },
              "id": 25662,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "32",
                "id": 25658,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1336:1:17",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "2"
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "commonType": {
                  "typeIdentifier": "t_rational_1024_by_1",
                  "typeString": "int_const 1024"
                },
                "id": 25661,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "hexValue": "32",
                  "id": 25659,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1340:1:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "hexValue": "3130",
                  "id": 25660,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1343:2:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_10_by_1",
                    "typeString": "int_const 10"
                  },
                  "value": "10"
                },
                "src": "1340:5:17",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1024_by_1",
                  "typeString": "int_const 1024"
                }
              },
              "src": "1336:9:17",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2048_by_1",
                "typeString": "int_const 2048"
              }
            },
            "visibility": "public"
          },
          {
            "id": 25667,
            "nodeType": "VariableDeclaration",
            "src": "1464:39:17",
            "constant": false,
            "functionSelector": "b95a2001",
            "mutability": "mutable",
            "name": "nonces",
            "scope": 26174,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
              "typeString": "mapping(uint32 => uint32)"
            },
            "typeName": {
              "id": 25666,
              "keyType": {
                "id": 25664,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "1472:6:17",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              },
              "nodeType": "Mapping",
              "src": "1464:25:17",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                "typeString": "mapping(uint32 => uint32)"
              },
              "valueType": {
                "id": 25665,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "1482:6:17",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 25669,
            "nodeType": "VariableDeclaration",
            "src": "1580:37:17",
            "constant": false,
            "functionSelector": "9df6c8e1",
            "mutability": "mutable",
            "name": "updaterManager",
            "scope": 26174,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
              "typeString": "contract IUpdaterManager"
            },
            "typeName": {
              "id": 25668,
              "name": "IUpdaterManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27431,
              "src": "1580:15:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                "typeString": "contract IUpdaterManager"
              }
            },
            "visibility": "public"
          },
          {
            "id": 25673,
            "nodeType": "VariableDeclaration",
            "src": "1700:25:17",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 26174,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$48_storage",
              "typeString": "uint256[48]"
            },
            "typeName": {
              "baseType": {
                "id": 25670,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1700:7:17",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 25672,
              "length": {
                "hexValue": "3438",
                "id": 25671,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1708:2:17",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_48_by_1",
                  "typeString": "int_const 48"
                },
                "value": "48"
              },
              "nodeType": "ArrayTypeName",
              "src": "1700:11:17",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$48_storage_ptr",
                "typeString": "uint256[48]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 25686,
            "nodeType": "EventDefinition",
            "src": "2321:191:17",
            "anonymous": false,
            "documentation": {
              "id": 25674,
              "nodeType": "StructuredDocumentation",
              "src": "1773:543:17",
              "text": " @notice Emitted when a new message is dispatched via Nomad\n @param messageHash Hash of message; the leaf inserted to the Merkle tree\n        for the message\n @param leafIndex Index of message's leaf in merkle tree\n @param destinationAndNonce Destination and destination-specific\n        nonce combined in single field ((destination << 32) & nonce)\n @param committedRoot the latest notarized root submitted in the last\n        signed Update\n @param message Raw bytes of message"
            },
            "name": "Dispatch",
            "parameters": {
              "id": 25685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25676,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "messageHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 25686,
                  "src": "2345:27:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25675,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2345:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25678,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "leafIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 25686,
                  "src": "2382:25:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 25677,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2382:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25680,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "destinationAndNonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 25686,
                  "src": "2417:34:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 25679,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2417:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25682,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25686,
                  "src": "2461:21:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25681,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2461:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25684,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "scope": 25686,
                  "src": "2492:13:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25683,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2492:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2335:176:17"
            }
          },
          {
            "id": 25695,
            "nodeType": "EventDefinition",
            "src": "2819:72:17",
            "anonymous": false,
            "documentation": {
              "id": 25687,
              "nodeType": "StructuredDocumentation",
              "src": "2518:296:17",
              "text": " @notice Emitted when proof of an improper update is submitted,\n which sets the contract to FAILED state\n @param oldRoot Old root of the improper update\n @param newRoot New root of the improper update\n @param signature Signature on `oldRoot` and `newRoot"
            },
            "name": "ImproperUpdate",
            "parameters": {
              "id": 25694,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25689,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25695,
                  "src": "2840:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25688,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2840:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25691,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25695,
                  "src": "2857:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25690,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2857:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25693,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 25695,
                  "src": "2874:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25692,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2874:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2839:51:17"
            }
          },
          {
            "id": 25708,
            "nodeType": "EventDefinition",
            "src": "3291:129:17",
            "anonymous": false,
            "documentation": {
              "id": 25696,
              "nodeType": "StructuredDocumentation",
              "src": "2897:389:17",
              "text": " @notice Emitted when proof of a double update is submitted,\n which sets the contract to FAILED state\n @param oldRoot Old root shared between two conflicting updates\n @param newRoot Array containing two conflicting new roots\n @param signature Signature on `oldRoot` and `newRoot`[0]\n @param signature2 Signature on `oldRoot` and `newRoot`[1]"
            },
            "name": "DoubleUpdate",
            "parameters": {
              "id": 25707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25698,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25708,
                  "src": "3319:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25697,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3319:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25702,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25708,
                  "src": "3344:18:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 25699,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3344:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 25701,
                    "length": {
                      "hexValue": "32",
                      "id": 25700,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3352:1:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "3344:10:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25704,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 25708,
                  "src": "3372:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25703,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3372:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25706,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature2",
                  "nodeType": "VariableDeclaration",
                  "scope": 25708,
                  "src": "3397:16:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25705,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3397:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3309:110:17"
            }
          },
          {
            "id": 25715,
            "nodeType": "EventDefinition",
            "src": "3698:72:17",
            "anonymous": false,
            "documentation": {
              "id": 25709,
              "nodeType": "StructuredDocumentation",
              "src": "3426:267:17",
              "text": " @notice Emitted when the Updater is slashed\n (should be paired with ImproperUpdater or DoubleUpdate event)\n @param updater The address of the updater\n @param reporter The address of the entity that reported the updater misbehavior"
            },
            "name": "UpdaterSlashed",
            "parameters": {
              "id": 25714,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25711,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 25715,
                  "src": "3719:23:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25710,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3719:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25713,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "reporter",
                  "nodeType": "VariableDeclaration",
                  "scope": 25715,
                  "src": "3744:24:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25712,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3744:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3718:51:17"
            }
          },
          {
            "id": 25720,
            "nodeType": "EventDefinition",
            "src": "3926:48:17",
            "anonymous": false,
            "documentation": {
              "id": 25716,
              "nodeType": "StructuredDocumentation",
              "src": "3776:145:17",
              "text": " @notice Emitted when the UpdaterManager contract is changed\n @param updaterManager The address of the new updaterManager"
            },
            "name": "NewUpdaterManager",
            "parameters": {
              "id": 25719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25718,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 25720,
                  "src": "3950:22:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25717,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3950:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3949:24:17"
            }
          },
          {
            "id": 25729,
            "nodeType": "FunctionDefinition",
            "src": "4026:59:17",
            "body": {
              "id": 25728,
              "nodeType": "Block",
              "src": "4083:2:17",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 25725,
                    "name": "_localDomain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 25722,
                    "src": "4069:12:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 25726,
                "modifierName": {
                  "id": 25724,
                  "name": "NomadBase",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 26382,
                  "src": "4059:9:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NomadBase_$26382_$",
                    "typeString": "type(contract NomadBase)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4059:23:17"
              }
            ],
            "name": "",
            "parameters": {
              "id": 25723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25722,
                  "mutability": "mutable",
                  "name": "_localDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 25729,
                  "src": "4038:19:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 25721,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4038:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4037:21:17"
            },
            "returnParameters": {
              "id": 25727,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4083:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 25750,
            "nodeType": "FunctionDefinition",
            "src": "4177:284:17",
            "body": {
              "id": 25749,
              "nodeType": "Block",
              "src": "4249:212:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 25736,
                      "name": "__QueueManager_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26411,
                      "src": "4324:25:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 25737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4324:27:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25738,
                  "nodeType": "ExpressionStatement",
                  "src": "4324:27:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25740,
                        "name": "_updaterManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25731,
                        "src": "4380:15:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                          "typeString": "contract IUpdaterManager"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                          "typeString": "contract IUpdaterManager"
                        }
                      ],
                      "id": 25739,
                      "name": "_setUpdaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26129,
                      "src": "4361:18:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IUpdaterManager_$27431_$returns$__$",
                        "typeString": "function (contract IUpdaterManager)"
                      }
                    },
                    "id": 25741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4361:35:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25742,
                  "nodeType": "ExpressionStatement",
                  "src": "4361:35:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 25744,
                            "name": "updaterManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25669,
                            "src": "4429:14:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                              "typeString": "contract IUpdaterManager"
                            }
                          },
                          "id": 25745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "updater",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27430,
                          "src": "4429:22:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 25746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4429:24:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25743,
                      "name": "__NomadBase_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26289,
                      "src": "4406:22:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4406:48:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25748,
                  "nodeType": "ExpressionStatement",
                  "src": "4406:48:17"
                }
              ]
            },
            "functionSelector": "c4d66de8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25734,
                "modifierName": {
                  "id": 25733,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23217,
                  "src": "4237:11:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4237:11:17"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 25732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25731,
                  "mutability": "mutable",
                  "name": "_updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 25750,
                  "src": "4197:31:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                    "typeString": "contract IUpdaterManager"
                  },
                  "typeName": {
                    "id": 25730,
                    "name": "IUpdaterManager",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27431,
                    "src": "4197:15:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                      "typeString": "contract IUpdaterManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4196:33:17"
            },
            "returnParameters": {
              "id": 25735,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4249:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 25766,
            "nodeType": "ModifierDefinition",
            "src": "4605:123:17",
            "body": {
              "id": 25765,
              "nodeType": "Block",
              "src": "4635:93:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 25760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 25754,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "4653:3:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 25755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "4653:10:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 25758,
                              "name": "updaterManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25669,
                              "src": "4675:14:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                                "typeString": "contract IUpdaterManager"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                                "typeString": "contract IUpdaterManager"
                              }
                            ],
                            "id": 25757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4667:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 25756,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4667:7:17",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 25759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4667:23:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4653:37:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21757064617465724d616e61676572",
                        "id": 25761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4692:17:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b5d14fabfe363d6fdb7137821583ec04f453f7521c6af70ec7c2fb050c5e8ca8",
                          "typeString": "literal_string \"!updaterManager\""
                        },
                        "value": "!updaterManager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b5d14fabfe363d6fdb7137821583ec04f453f7521c6af70ec7c2fb050c5e8ca8",
                          "typeString": "literal_string \"!updaterManager\""
                        }
                      ],
                      "id": 25753,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4645:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4645:65:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25763,
                  "nodeType": "ExpressionStatement",
                  "src": "4645:65:17"
                },
                {
                  "id": 25764,
                  "nodeType": "PlaceholderStatement",
                  "src": "4720:1:17"
                }
              ]
            },
            "documentation": {
              "id": 25751,
              "nodeType": "StructuredDocumentation",
              "src": "4511:89:17",
              "text": " @notice Ensures that function is called by the UpdaterManager contract"
            },
            "name": "onlyUpdaterManager",
            "parameters": {
              "id": 25752,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4632:2:17"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25779,
            "nodeType": "ModifierDefinition",
            "src": "4831:96:17",
            "body": {
              "id": 25778,
              "nodeType": "Block",
              "src": "4852:75:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_enum$_States_$26229",
                          "typeString": "enum NomadBase.States"
                        },
                        "id": 25773,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 25770,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26235,
                          "src": "4870:5:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_States_$26229",
                            "typeString": "enum NomadBase.States"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "expression": {
                            "id": 25771,
                            "name": "States",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26229,
                            "src": "4879:6:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_States_$26229_$",
                              "typeString": "type(enum NomadBase.States)"
                            }
                          },
                          "id": 25772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Failed",
                          "nodeType": "MemberAccess",
                          "src": "4879:13:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_States_$26229",
                            "typeString": "enum NomadBase.States"
                          }
                        },
                        "src": "4870:22:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6661696c6564207374617465",
                        "id": 25774,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4894:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a33e56fa88946bb07ff3937a1f7bcc7324c2830576aaa78d719bb4f533bc46d7",
                          "typeString": "literal_string \"failed state\""
                        },
                        "value": "failed state"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a33e56fa88946bb07ff3937a1f7bcc7324c2830576aaa78d719bb4f533bc46d7",
                          "typeString": "literal_string \"failed state\""
                        }
                      ],
                      "id": 25769,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4862:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4862:47:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25776,
                  "nodeType": "ExpressionStatement",
                  "src": "4862:47:17"
                },
                {
                  "id": 25777,
                  "nodeType": "PlaceholderStatement",
                  "src": "4919:1:17"
                }
              ]
            },
            "documentation": {
              "id": 25767,
              "nodeType": "StructuredDocumentation",
              "src": "4734:92:17",
              "text": " @notice Ensures that contract state != FAILED when the function is called"
            },
            "name": "notFailed",
            "parameters": {
              "id": 25768,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4849:2:17"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 25797,
            "nodeType": "FunctionDefinition",
            "src": "5161:220:17",
            "body": {
              "id": 25796,
              "nodeType": "Block",
              "src": "5227:154:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25788,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25782,
                        "src": "5249:8:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25787,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26332,
                      "src": "5237:11:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5237:21:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25790,
                  "nodeType": "ExpressionStatement",
                  "src": "5237:21:17"
                },
                {
                  "expression": {
                    "id": 25794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 25791,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26235,
                      "src": "5353:5:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$26229",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 25792,
                        "name": "States",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26229,
                        "src": "5361:6:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_States_$26229_$",
                          "typeString": "type(enum NomadBase.States)"
                        }
                      },
                      "id": 25793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Active",
                      "nodeType": "MemberAccess",
                      "src": "5361:13:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$26229",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "src": "5353:21:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_States_$26229",
                      "typeString": "enum NomadBase.States"
                    }
                  },
                  "id": 25795,
                  "nodeType": "ExpressionStatement",
                  "src": "5353:21:17"
                }
              ]
            },
            "documentation": {
              "id": 25780,
              "nodeType": "StructuredDocumentation",
              "src": "5017:139:17",
              "text": " @notice Set a new Updater\n @dev To be set when rotating Updater after Fraud\n @param _updater the new Updater"
            },
            "functionSelector": "9d54f419",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25785,
                "modifierName": {
                  "id": 25784,
                  "name": "onlyUpdaterManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25766,
                  "src": "5208:18:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5208:18:17"
              }
            ],
            "name": "setUpdater",
            "parameters": {
              "id": 25783,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25782,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 25797,
                  "src": "5181:16:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5181:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5180:18:17"
            },
            "returnParameters": {
              "id": 25786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5227:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 25820,
            "nodeType": "FunctionDefinition",
            "src": "5800:205:17",
            "body": {
              "id": 25819,
              "nodeType": "Block",
              "src": "5871:134:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25807,
                            "name": "_updaterManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25800,
                            "src": "5916:15:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 25806,
                          "name": "IUpdaterManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27431,
                          "src": "5900:15:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IUpdaterManager_$27431_$",
                            "typeString": "type(contract IUpdaterManager)"
                          }
                        },
                        "id": 25808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5900:32:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                          "typeString": "contract IUpdaterManager"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                          "typeString": "contract IUpdaterManager"
                        }
                      ],
                      "id": 25805,
                      "name": "_setUpdaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26129,
                      "src": "5881:18:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IUpdaterManager_$27431_$returns$__$",
                        "typeString": "function (contract IUpdaterManager)"
                      }
                    },
                    "id": 25809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5881:52:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25810,
                  "nodeType": "ExpressionStatement",
                  "src": "5881:52:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 25813,
                                "name": "_updaterManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25800,
                                "src": "5971:15:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 25812,
                              "name": "IUpdaterManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27431,
                              "src": "5955:15:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUpdaterManager_$27431_$",
                                "typeString": "type(contract IUpdaterManager)"
                              }
                            },
                            "id": 25814,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5955:32:17",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                              "typeString": "contract IUpdaterManager"
                            }
                          },
                          "id": 25815,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "updater",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27430,
                          "src": "5955:40:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 25816,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5955:42:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25811,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26332,
                      "src": "5943:11:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5943:55:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25818,
                  "nodeType": "ExpressionStatement",
                  "src": "5943:55:17"
                }
              ]
            },
            "documentation": {
              "id": 25798,
              "nodeType": "StructuredDocumentation",
              "src": "5387:408:17",
              "text": " @notice Set a new UpdaterManager contract\n @dev Home(s) will initially be initialized using a trusted UpdaterManager contract;\n we will progressively decentralize by swapping the trusted contract with a new implementation\n that implements Updater bonding & slashing, and rules for Updater selection & rotation\n @param _updaterManager the new UpdaterManager contract"
            },
            "functionSelector": "9776120e",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25803,
                "modifierName": {
                  "id": 25802,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "5861:9:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5861:9:17"
              }
            ],
            "name": "setUpdaterManager",
            "parameters": {
              "id": 25801,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25800,
                  "mutability": "mutable",
                  "name": "_updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 25820,
                  "src": "5827:23:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25799,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5827:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5826:25:17"
            },
            "returnParameters": {
              "id": 25804,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5871:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 25910,
            "nodeType": "FunctionDefinition",
            "src": "6511:1287:17",
            "body": {
              "id": 25909,
              "nodeType": "Block",
              "src": "6659:1139:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 25833,
                            "name": "_messageBody",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25827,
                            "src": "6677:12:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 25834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6677:19:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 25835,
                          "name": "MAX_MESSAGE_BODY_BYTES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25663,
                          "src": "6700:22:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6677:45:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6d736720746f6f206c6f6e67",
                        "id": 25837,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6724:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_93c2a0d343c23d45eece2e90501aea90bce8ebac49296b5b7f0fa68afe6e7d03",
                          "typeString": "literal_string \"msg too long\""
                        },
                        "value": "msg too long"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_93c2a0d343c23d45eece2e90501aea90bce8ebac49296b5b7f0fa68afe6e7d03",
                          "typeString": "literal_string \"msg too long\""
                        }
                      ],
                      "id": 25832,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6669:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6669:70:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25839,
                  "nodeType": "ExpressionStatement",
                  "src": "6669:70:17"
                },
                {
                  "assignments": [
                    25841
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25841,
                      "mutability": "mutable",
                      "name": "_nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 25909,
                      "src": "6825:13:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 25840,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6825:6:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25845,
                  "initialValue": {
                    "baseExpression": {
                      "id": 25842,
                      "name": "nonces",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25667,
                      "src": "6841:6:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                        "typeString": "mapping(uint32 => uint32)"
                      }
                    },
                    "id": 25844,
                    "indexExpression": {
                      "id": 25843,
                      "name": "_destinationDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25823,
                      "src": "6848:18:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6841:26:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6825:42:17"
                },
                {
                  "expression": {
                    "id": 25852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 25846,
                        "name": "nonces",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25667,
                        "src": "6877:6:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                          "typeString": "mapping(uint32 => uint32)"
                        }
                      },
                      "id": 25848,
                      "indexExpression": {
                        "id": 25847,
                        "name": "_destinationDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25823,
                        "src": "6884:18:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6877:26:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 25851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 25849,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25841,
                        "src": "6906:6:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 25850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6915:1:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "6906:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "6877:39:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 25853,
                  "nodeType": "ExpressionStatement",
                  "src": "6877:39:17"
                },
                {
                  "assignments": [
                    25855
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25855,
                      "mutability": "mutable",
                      "name": "_message",
                      "nodeType": "VariableDeclaration",
                      "scope": 25909,
                      "src": "6974:21:17",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 25854,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6974:5:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25875,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25858,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26231,
                        "src": "7033:11:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 25865,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "7082:3:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 25866,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "7082:10:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 25864,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7074:7:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 25863,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7074:7:17",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 25867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7074:19:17",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 25862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7066:7:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 25861,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "7066:7:17",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 25868,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7066:28:17",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 25860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7058:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 25859,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7058:7:17",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 25869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7058:37:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25870,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25841,
                        "src": "7109:6:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 25871,
                        "name": "_destinationDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25823,
                        "src": "7129:18:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 25872,
                        "name": "_recipientAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25825,
                        "src": "7161:17:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25873,
                        "name": "_messageBody",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25827,
                        "src": "7192:12:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 25856,
                        "name": "Message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28215,
                        "src": "6998:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Message_$28215_$",
                          "typeString": "type(library Message)"
                        }
                      },
                      "id": 25857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatMessage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28032,
                      "src": "6998:21:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint32,bytes32,uint32,uint32,bytes32,bytes memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 25874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6998:216:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6974:240:17"
                },
                {
                  "assignments": [
                    25877
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25877,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 25909,
                      "src": "7282:20:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 25876,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7282:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25881,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25879,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25855,
                        "src": "7315:8:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 25878,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "7305:9:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 25880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7305:19:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7282:42:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25885,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25877,
                        "src": "7346:12:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 25882,
                        "name": "tree",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26184,
                        "src": "7334:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Tree_$27451_storage",
                          "typeString": "struct MerkleLib.Tree storage ref"
                        }
                      },
                      "id": 25884,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "insert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27529,
                      "src": "7334:11:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Tree_$27451_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_struct$_Tree_$27451_storage_ptr_$",
                        "typeString": "function (struct MerkleLib.Tree storage pointer,bytes32)"
                      }
                    },
                    "id": 25886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7334:25:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25887,
                  "nodeType": "ExpressionStatement",
                  "src": "7334:25:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 25891,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26199,
                          "src": "7450:4:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 25892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7450:6:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 25888,
                        "name": "queue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26396,
                        "src": "7436:5:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Queue_$28227_storage",
                          "typeString": "struct QueueLib.Queue storage ref"
                        }
                      },
                      "id": 25890,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enqueue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28286,
                      "src": "7436:13:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Queue_$28227_storage_ptr_$_t_bytes32_$returns$_t_uint128_$bound_to$_t_struct$_Queue_$28227_storage_ptr_$",
                        "typeString": "function (struct QueueLib.Queue storage pointer,bytes32) returns (uint128)"
                      }
                    },
                    "id": 25893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7436:21:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 25894,
                  "nodeType": "ExpressionStatement",
                  "src": "7436:21:17"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 25896,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25877,
                        "src": "7633:12:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 25900,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 25897,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26209,
                            "src": "7659:5:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 25898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7659:7:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 25899,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7669:1:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7659:11:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 25902,
                            "name": "_destinationDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25823,
                            "src": "7705:18:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 25903,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25841,
                            "src": "7725:6:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 25901,
                          "name": "_destinationAndNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26173,
                          "src": "7684:20:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$",
                            "typeString": "function (uint32,uint32) pure returns (uint64)"
                          }
                        },
                        "id": 25904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7684:48:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 25905,
                        "name": "committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26237,
                        "src": "7746:13:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25906,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25855,
                        "src": "7773:8:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 25895,
                      "name": "Dispatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25686,
                      "src": "7611:8:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint64_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint64,bytes32,bytes memory)"
                      }
                    },
                    "id": 25907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7611:180:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25908,
                  "nodeType": "EmitStatement",
                  "src": "7606:185:17"
                }
              ]
            },
            "documentation": {
              "id": 25821,
              "nodeType": "StructuredDocumentation",
              "src": "6065:441:17",
              "text": " @notice Dispatch the message to the destination domain & recipient\n @dev Format the message, insert its hash into Merkle tree,\n enqueue the new Merkle root, and emit `Dispatch` event with message information.\n @param _destinationDomain Domain of destination chain\n @param _recipientAddress Address of recipient on destination chain as bytes32\n @param _messageBody Raw bytes content of message"
            },
            "functionSelector": "fa31de01",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25830,
                "modifierName": {
                  "id": 25829,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25779,
                  "src": "6649:9:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6649:9:17"
              }
            ],
            "name": "dispatch",
            "parameters": {
              "id": 25828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25823,
                  "mutability": "mutable",
                  "name": "_destinationDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 25910,
                  "src": "6538:25:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 25822,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6538:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25825,
                  "mutability": "mutable",
                  "name": "_recipientAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 25910,
                  "src": "6573:25:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25824,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6573:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25827,
                  "mutability": "mutable",
                  "name": "_messageBody",
                  "nodeType": "VariableDeclaration",
                  "scope": 25910,
                  "src": "6608:25:17",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25826,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6608:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6528:111:17"
            },
            "returnParameters": {
              "id": 25831,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6659:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 25955,
            "nodeType": "FunctionDefinition",
            "src": "8470:734:17",
            "body": {
              "id": 25954,
              "nodeType": "Block",
              "src": "8602:602:17",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 25923,
                        "name": "_committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25913,
                        "src": "8765:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25924,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25915,
                        "src": "8781:8:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25925,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25917,
                        "src": "8791:10:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 25922,
                      "name": "improperUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26098,
                      "src": "8750:14:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,bytes32,bytes memory) returns (bool)"
                      }
                    },
                    "id": 25926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8750:52:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25928,
                  "nodeType": "IfStatement",
                  "src": "8746:65:17",
                  "trueBody": {
                    "functionReturnParameters": 25921,
                    "id": 25927,
                    "nodeType": "Return",
                    "src": "8804:7:17"
                  }
                },
                {
                  "body": {
                    "id": 25941,
                    "nodeType": "Block",
                    "src": "8920:98:17",
                    "statements": [
                      {
                        "assignments": [
                          25931
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 25931,
                            "mutability": "mutable",
                            "name": "_next",
                            "nodeType": "VariableDeclaration",
                            "scope": 25941,
                            "src": "8934:13:17",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 25930,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "8934:7:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 25935,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 25932,
                              "name": "queue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26396,
                              "src": "8950:5:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Queue_$28227_storage",
                                "typeString": "struct QueueLib.Queue storage ref"
                              }
                            },
                            "id": 25933,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "dequeue",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28344,
                            "src": "8950:13:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Queue_$28227_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Queue_$28227_storage_ptr_$",
                              "typeString": "function (struct QueueLib.Queue storage pointer) returns (bytes32)"
                            }
                          },
                          "id": 25934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8950:15:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8934:31:17"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 25938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 25936,
                            "name": "_next",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25931,
                            "src": "8983:5:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 25937,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25915,
                            "src": "8992:8:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8983:17:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 25940,
                        "nodeType": "IfStatement",
                        "src": "8979:28:17",
                        "trueBody": {
                          "id": 25939,
                          "nodeType": "Break",
                          "src": "9002:5:17"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "hexValue": "74727565",
                    "id": 25929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8914:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "id": 25942,
                  "nodeType": "WhileStatement",
                  "src": "8907:111:17"
                },
                {
                  "expression": {
                    "id": 25945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 25943,
                      "name": "committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26237,
                      "src": "9101:13:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 25944,
                      "name": "_newRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25915,
                      "src": "9117:8:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9101:24:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 25946,
                  "nodeType": "ExpressionStatement",
                  "src": "9101:24:17"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 25948,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26231,
                        "src": "9147:11:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 25949,
                        "name": "_committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25913,
                        "src": "9160:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25950,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25915,
                        "src": "9176:8:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 25951,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25917,
                        "src": "9186:10:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 25947,
                      "name": "Update",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26252,
                      "src": "9140:6:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,bytes32,bytes32,bytes memory)"
                      }
                    },
                    "id": 25952,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9140:57:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25953,
                  "nodeType": "EmitStatement",
                  "src": "9135:62:17"
                }
              ]
            },
            "documentation": {
              "id": 25911,
              "nodeType": "StructuredDocumentation",
              "src": "7804:661:17",
              "text": " @notice Submit a signature from the Updater \"notarizing\" a root,\n which updates the Home contract's `committedRoot`,\n and publishes the signature which will be relayed to Replica contracts\n @dev emits Update event\n @dev If _newRoot is not contained in the queue,\n the Update is a fraudulent Improper Update, so\n the Updater is slashed & Home is set to FAILED state\n @param _committedRoot Current updated merkle root which the update is building off of\n @param _newRoot New merkle root to update the contract state to\n @param _signature Updater signature on `_committedRoot` and `_newRoot`"
            },
            "functionSelector": "b31c01fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25920,
                "modifierName": {
                  "id": 25919,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25779,
                  "src": "8592:9:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8592:9:17"
              }
            ],
            "name": "update",
            "parameters": {
              "id": 25918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25913,
                  "mutability": "mutable",
                  "name": "_committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25955,
                  "src": "8495:22:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25912,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8495:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25915,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25955,
                  "src": "8527:16:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25914,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8527:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25917,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 25955,
                  "src": "8553:23:17",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25916,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8553:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8485:97:17"
            },
            "returnParameters": {
              "id": 25921,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8602:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 25981,
            "nodeType": "FunctionDefinition",
            "src": "9562:247:17",
            "body": {
              "id": 25980,
              "nodeType": "Block",
              "src": "9676:133:17",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 25967,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 25963,
                          "name": "queue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26396,
                          "src": "9690:5:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Queue_$28227_storage",
                            "typeString": "struct QueueLib.Queue storage ref"
                          }
                        },
                        "id": 25964,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28604,
                        "src": "9690:12:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Queue_$28227_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Queue_$28227_storage_ptr_$",
                          "typeString": "function (struct QueueLib.Queue storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 25965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9690:14:17",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 25966,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9708:1:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9690:19:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25979,
                  "nodeType": "IfStatement",
                  "src": "9686:117:17",
                  "trueBody": {
                    "id": 25978,
                    "nodeType": "Block",
                    "src": "9711:92:17",
                    "statements": [
                      {
                        "expression": {
                          "id": 25970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 25968,
                            "name": "_committedRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25959,
                            "src": "9725:14:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 25969,
                            "name": "committedRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26237,
                            "src": "9742:13:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "9725:30:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 25971,
                        "nodeType": "ExpressionStatement",
                        "src": "9725:30:17"
                      },
                      {
                        "expression": {
                          "id": 25976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 25972,
                            "name": "_new",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25961,
                            "src": "9769:4:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 25973,
                                "name": "queue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26396,
                                "src": "9776:5:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Queue_$28227_storage",
                                  "typeString": "struct QueueLib.Queue storage ref"
                                }
                              },
                              "id": 25974,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lastItem",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28540,
                              "src": "9776:14:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_Queue_$28227_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Queue_$28227_storage_ptr_$",
                                "typeString": "function (struct QueueLib.Queue storage pointer) view returns (bytes32)"
                              }
                            },
                            "id": 25975,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9776:16:17",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "9769:23:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 25977,
                        "nodeType": "ExpressionStatement",
                        "src": "9769:23:17"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 25956,
              "nodeType": "StructuredDocumentation",
              "src": "9210:347:17",
              "text": " @notice Suggest an update for the Updater to sign and submit.\n @dev If queue is empty, null bytes returned for both\n (No update is necessary because no messages have been dispatched since the last update)\n @return _committedRoot Latest root signed by the Updater\n @return _new Latest enqueued Merkle root"
            },
            "functionSelector": "36e104de",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "suggestUpdate",
            "parameters": {
              "id": 25957,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9584:2:17"
            },
            "returnParameters": {
              "id": 25962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25959,
                  "mutability": "mutable",
                  "name": "_committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 25981,
                  "src": "9634:22:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25958,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9634:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25961,
                  "mutability": "mutable",
                  "name": "_new",
                  "nodeType": "VariableDeclaration",
                  "scope": 25981,
                  "src": "9658:12:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25960,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9658:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9633:38:17"
            },
            "scope": 26174,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26035,
            "nodeType": "FunctionDefinition",
            "src": "10420:521:17",
            "body": {
              "id": 26034,
              "nodeType": "Block",
              "src": "10602:339:17",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 26021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 26013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 25999,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25984,
                            "src": "10659:8:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "baseExpression": {
                              "id": 26000,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25988,
                              "src": "10669:8:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              }
                            },
                            "id": 26002,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 26001,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10678:1:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10669:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26003,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25990,
                            "src": "10682:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 25997,
                            "name": "NomadBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26382,
                            "src": "10629:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_NomadBase_$26382_$",
                              "typeString": "type(contract NomadBase)"
                            }
                          },
                          "id": 25998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_isUpdaterSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26373,
                          "src": "10629:29:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 26004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10629:64:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 26007,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25984,
                            "src": "10739:8:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "baseExpression": {
                              "id": 26008,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25988,
                              "src": "10749:8:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              }
                            },
                            "id": 26010,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 26009,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10758:1:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10749:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26011,
                            "name": "_signature2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25992,
                            "src": "10762:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 26005,
                            "name": "NomadBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26382,
                            "src": "10709:9:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_NomadBase_$26382_$",
                              "typeString": "type(contract NomadBase)"
                            }
                          },
                          "id": 26006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_isUpdaterSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26373,
                          "src": "10709:29:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 26012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10709:65:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "10629:145:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 26020,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 26014,
                          "name": "_newRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25988,
                          "src": "10790:8:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                            "typeString": "bytes32[2] calldata"
                          }
                        },
                        "id": 26016,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 26015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10799:1:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10790:11:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "baseExpression": {
                          "id": 26017,
                          "name": "_newRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25988,
                          "src": "10805:8:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                            "typeString": "bytes32[2] calldata"
                          }
                        },
                        "id": 26019,
                        "indexExpression": {
                          "hexValue": "31",
                          "id": 26018,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10814:1:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10805:11:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "10790:26:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10629:187:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26033,
                  "nodeType": "IfStatement",
                  "src": "10612:323:17",
                  "trueBody": {
                    "id": 26032,
                    "nodeType": "Block",
                    "src": "10827:108:17",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 26022,
                            "name": "_fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26152,
                            "src": "10841:5:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 26023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10841:7:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 26024,
                        "nodeType": "ExpressionStatement",
                        "src": "10841:7:17"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 26026,
                              "name": "_oldRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25984,
                              "src": "10880:8:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 26027,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25988,
                              "src": "10890:8:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              }
                            },
                            {
                              "id": 26028,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25990,
                              "src": "10900:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 26029,
                              "name": "_signature2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25992,
                              "src": "10912:11:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 26025,
                            "name": "DoubleUpdate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25708,
                            "src": "10867:12:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_array$_t_bytes32_$2_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32,bytes32[2] memory,bytes memory,bytes memory)"
                            }
                          },
                          "id": 26030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10867:57:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 26031,
                        "nodeType": "EmitStatement",
                        "src": "10862:62:17"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 25982,
              "nodeType": "StructuredDocumentation",
              "src": "9815:600:17",
              "text": " @notice Called by external agent. Checks that signatures on two sets of\n roots are valid and that the new roots conflict with each other. If both\n cases hold true, the contract is failed and a `DoubleUpdate` event is\n emitted.\n @dev When `fail()` is called on Home, updater is slashed.\n @param _oldRoot Old root shared between two conflicting updates\n @param _newRoot Array containing two conflicting new roots\n @param _signature Signature on `_oldRoot` and `_newRoot`[0]\n @param _signature2 Signature on `_oldRoot` and `_newRoot`[1]"
            },
            "functionSelector": "19d9d21a",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25995,
                "modifierName": {
                  "id": 25994,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25779,
                  "src": "10592:9:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10592:9:17"
              }
            ],
            "name": "doubleUpdate",
            "parameters": {
              "id": 25993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25984,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26035,
                  "src": "10451:16:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 25983,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10451:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25988,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26035,
                  "src": "10477:28:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 25985,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10477:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 25987,
                    "length": {
                      "hexValue": "32",
                      "id": 25986,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10485:1:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "10477:10:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25990,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 26035,
                  "src": "10515:25:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25989,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10515:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25992,
                  "mutability": "mutable",
                  "name": "_signature2",
                  "nodeType": "VariableDeclaration",
                  "scope": 26035,
                  "src": "10550:26:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25991,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10550:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10441:141:17"
            },
            "returnParameters": {
              "id": 25996,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10602:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 26047,
            "nodeType": "FunctionDefinition",
            "src": "11076:117:17",
            "body": {
              "id": 26046,
              "nodeType": "Block",
              "src": "11141:52:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 26043,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26231,
                        "src": "11174:11:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 26042,
                      "name": "_homeDomainHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26312,
                      "src": "11158:15:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) pure returns (bytes32)"
                      }
                    },
                    "id": 26044,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11158:28:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 26041,
                  "id": 26045,
                  "nodeType": "Return",
                  "src": "11151:35:17"
                }
              ]
            },
            "baseFunctions": [
              26295
            ],
            "documentation": {
              "id": 26036,
              "nodeType": "StructuredDocumentation",
              "src": "10999:72:17",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\""
            },
            "functionSelector": "45630b1a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "homeDomainHash",
            "overrides": {
              "id": 26038,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11114:8:17"
            },
            "parameters": {
              "id": 26037,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11099:2:17"
            },
            "returnParameters": {
              "id": 26041,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26040,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26047,
                  "src": "11132:7:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26039,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11132:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11131:9:17"
            },
            "scope": 26174,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26098,
            "nodeType": "FunctionDefinition",
            "src": "12679:756:17",
            "body": {
              "id": 26097,
              "nodeType": "Block",
              "src": "12826:609:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 26063,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26050,
                            "src": "12877:8:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26064,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26052,
                            "src": "12887:8:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 26065,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26054,
                            "src": "12897:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 26062,
                          "name": "_isUpdaterSignature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26373,
                          "src": "12857:19:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 26066,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12857:51:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217570646174657220736967",
                        "id": 26067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12922:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        },
                        "value": "!updater sig"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        }
                      ],
                      "id": 26061,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12836:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12836:110:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26069,
                  "nodeType": "ExpressionStatement",
                  "src": "12836:110:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 26073,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 26071,
                          "name": "_oldRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26050,
                          "src": "12964:8:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 26072,
                          "name": "committedRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26237,
                          "src": "12976:13:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "12964:25:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420612063757272656e7420757064617465",
                        "id": 26074,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12991:22:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ec62e52e468c335a4f006213f26d62ade37fad98fff957b7a5971753815e71bb",
                          "typeString": "literal_string \"not a current update\""
                        },
                        "value": "not a current update"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ec62e52e468c335a4f006213f26d62ade37fad98fff957b7a5971753815e71bb",
                          "typeString": "literal_string \"not a current update\""
                        }
                      ],
                      "id": 26070,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12956:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12956:58:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26076,
                  "nodeType": "ExpressionStatement",
                  "src": "12956:58:17"
                },
                {
                  "condition": {
                    "id": 26081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13162:25:17",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 26079,
                          "name": "_newRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26052,
                          "src": "13178:8:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 26077,
                          "name": "queue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26396,
                          "src": "13163:5:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Queue_$28227_storage",
                            "typeString": "struct QueueLib.Queue storage ref"
                          }
                        },
                        "id": 26078,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contains",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28525,
                        "src": "13163:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Queue_$28227_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Queue_$28227_storage_ptr_$",
                          "typeString": "function (struct QueueLib.Queue storage pointer,bytes32) view returns (bool)"
                        }
                      },
                      "id": 26080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13163:24:17",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 26094,
                  "nodeType": "IfStatement",
                  "src": "13158:153:17",
                  "trueBody": {
                    "id": 26093,
                    "nodeType": "Block",
                    "src": "13189:122:17",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 26082,
                            "name": "_fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26152,
                            "src": "13203:5:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 26083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13203:7:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 26084,
                        "nodeType": "ExpressionStatement",
                        "src": "13203:7:17"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 26086,
                              "name": "_oldRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26050,
                              "src": "13244:8:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 26087,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26052,
                              "src": "13254:8:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 26088,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26054,
                              "src": "13264:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 26085,
                            "name": "ImproperUpdate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25695,
                            "src": "13229:14:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32,bytes32,bytes memory)"
                            }
                          },
                          "id": 26089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13229:46:17",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 26090,
                        "nodeType": "EmitStatement",
                        "src": "13224:51:17"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 26091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13296:4:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 26060,
                        "id": 26092,
                        "nodeType": "Return",
                        "src": "13289:11:17"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 26095,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13423:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 26060,
                  "id": 26096,
                  "nodeType": "Return",
                  "src": "13416:12:17"
                }
              ]
            },
            "documentation": {
              "id": 26048,
              "nodeType": "StructuredDocumentation",
              "src": "11199:1475:17",
              "text": " @notice Check if an Update is an Improper Update;\n if so, slash the Updater and set the contract to FAILED state.\n An Improper Update is an update building off of the Home's `committedRoot`\n for which the `_newRoot` does not currently exist in the Home's queue.\n This would mean that message(s) that were not truly\n dispatched on Home were falsely included in the signed root.\n An Improper Update will only be accepted as valid by the Replica\n If an Improper Update is attempted on Home,\n the Updater will be slashed immediately.\n If an Improper Update is submitted to the Replica,\n it should be relayed to the Home contract using this function\n in order to slash the Updater with an Improper Update.\n An Improper Update submitted to the Replica is only valid\n while the `_oldRoot` is still equal to the `committedRoot` on Home;\n if the `committedRoot` on Home has already been updated with a valid Update,\n then the Updater should be slashed with a Double Update.\n @dev Reverts (and doesn't slash updater) if signature is invalid or\n update not current\n @param _oldRoot Old merkle tree root (should equal home's committedRoot)\n @param _newRoot New merkle tree root\n @param _signature Updater signature on `_oldRoot` and `_newRoot`\n @return TRUE if update was an Improper Update (implying Updater was slashed)"
            },
            "functionSelector": "8e4e30e0",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 26057,
                "modifierName": {
                  "id": 26056,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 25779,
                  "src": "12801:9:17",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12801:9:17"
              }
            ],
            "name": "improperUpdate",
            "parameters": {
              "id": 26055,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26050,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26098,
                  "src": "12712:16:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26049,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12712:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26052,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 26098,
                  "src": "12738:16:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 26051,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12738:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26054,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 26098,
                  "src": "12764:23:17",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 26053,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12764:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12702:91:17"
            },
            "returnParameters": {
              "id": 26060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26059,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26098,
                  "src": "12820:4:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 26058,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12820:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12819:6:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 26129,
            "nodeType": "FunctionDefinition",
            "src": "13609:319:17",
            "body": {
              "id": 26128,
              "nodeType": "Block",
              "src": "13679:249:17",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 26109,
                                "name": "_updaterManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26101,
                                "src": "13737:15:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                                  "typeString": "contract IUpdaterManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                                  "typeString": "contract IUpdaterManager"
                                }
                              ],
                              "id": 26108,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13729:7:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 26107,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "13729:7:17",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 26110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13729:24:17",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 26105,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24045,
                            "src": "13710:7:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$24045_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 26106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 23769,
                          "src": "13710:18:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 26111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13710:44:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21636f6e747261637420757064617465724d616e61676572",
                        "id": 26112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13768:26:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2030918762add9f615cabfd744df052ce2c85852f89710301f341b4c81931185",
                          "typeString": "literal_string \"!contract updaterManager\""
                        },
                        "value": "!contract updaterManager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2030918762add9f615cabfd744df052ce2c85852f89710301f341b4c81931185",
                          "typeString": "literal_string \"!contract updaterManager\""
                        }
                      ],
                      "id": 26104,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13689:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 26113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13689:115:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26114,
                  "nodeType": "ExpressionStatement",
                  "src": "13689:115:17"
                },
                {
                  "expression": {
                    "id": 26119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26115,
                      "name": "updaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25669,
                      "src": "13814:14:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                        "typeString": "contract IUpdaterManager"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 26117,
                          "name": "_updaterManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26101,
                          "src": "13847:15:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                            "typeString": "contract IUpdaterManager"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                            "typeString": "contract IUpdaterManager"
                          }
                        ],
                        "id": 26116,
                        "name": "IUpdaterManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27431,
                        "src": "13831:15:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IUpdaterManager_$27431_$",
                          "typeString": "type(contract IUpdaterManager)"
                        }
                      },
                      "id": 26118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13831:32:17",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                        "typeString": "contract IUpdaterManager"
                      }
                    },
                    "src": "13814:49:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                      "typeString": "contract IUpdaterManager"
                    }
                  },
                  "id": 26120,
                  "nodeType": "ExpressionStatement",
                  "src": "13814:49:17"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 26124,
                            "name": "_updaterManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26101,
                            "src": "13904:15:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                              "typeString": "contract IUpdaterManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                              "typeString": "contract IUpdaterManager"
                            }
                          ],
                          "id": 26123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13896:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 26122,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13896:7:17",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 26125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13896:24:17",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 26121,
                      "name": "NewUpdaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25720,
                      "src": "13878:17:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 26126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13878:43:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26127,
                  "nodeType": "EmitStatement",
                  "src": "13873:48:17"
                }
              ]
            },
            "documentation": {
              "id": 26099,
              "nodeType": "StructuredDocumentation",
              "src": "13495:109:17",
              "text": " @notice Set the UpdaterManager\n @param _updaterManager Address of the UpdaterManager"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setUpdaterManager",
            "parameters": {
              "id": 26102,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26101,
                  "mutability": "mutable",
                  "name": "_updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 26129,
                  "src": "13637:31:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                    "typeString": "contract IUpdaterManager"
                  },
                  "typeName": {
                    "id": 26100,
                    "name": "IUpdaterManager",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27431,
                    "src": "13637:15:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                      "typeString": "contract IUpdaterManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13636:33:17"
            },
            "returnParameters": {
              "id": 26103,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13679:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26152,
            "nodeType": "FunctionDefinition",
            "src": "14091:222:17",
            "body": {
              "id": 26151,
              "nodeType": "Block",
              "src": "14117:196:17",
              "statements": [
                {
                  "expression": {
                    "id": 26136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 26133,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26235,
                      "src": "14161:5:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$26229",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 26134,
                        "name": "States",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26229,
                        "src": "14169:6:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_States_$26229_$",
                          "typeString": "type(enum NomadBase.States)"
                        }
                      },
                      "id": 26135,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Failed",
                      "nodeType": "MemberAccess",
                      "src": "14169:13:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$26229",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "src": "14161:21:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_States_$26229",
                      "typeString": "enum NomadBase.States"
                    }
                  },
                  "id": 26137,
                  "nodeType": "ExpressionStatement",
                  "src": "14161:21:17"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 26141,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "14245:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 26142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "14245:10:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 26138,
                        "name": "updaterManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25669,
                        "src": "14217:14:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$27431",
                          "typeString": "contract IUpdaterManager"
                        }
                      },
                      "id": 26140,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slashUpdater",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27425,
                      "src": "14217:27:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable) external"
                      }
                    },
                    "id": 26143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14217:39:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26144,
                  "nodeType": "ExpressionStatement",
                  "src": "14217:39:17"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 26146,
                        "name": "updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 26233,
                        "src": "14286:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 26147,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "14295:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 26148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "14295:10:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 26145,
                      "name": "UpdaterSlashed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25715,
                      "src": "14271:14:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 26149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14271:35:17",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 26150,
                  "nodeType": "EmitStatement",
                  "src": "14266:40:17"
                }
              ]
            },
            "documentation": {
              "id": 26130,
              "nodeType": "StructuredDocumentation",
              "src": "13934:152:17",
              "text": " @notice Slash the Updater and set contract state to FAILED\n @dev Called when fraud is proven (Improper Update or Double Update)"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_fail",
            "parameters": {
              "id": 26131,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14105:2:17"
            },
            "returnParameters": {
              "id": 26132,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14117:0:17"
            },
            "scope": 26174,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 26173,
            "nodeType": "FunctionDefinition",
            "src": "14669:186:17",
            "body": {
              "id": 26172,
              "nodeType": "Block",
              "src": "14794:61:17",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 26170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 26167,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 26164,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 26155,
                                "src": "14819:12:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 26163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14812:6:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 26162,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "14812:6:17",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 26165,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14812:20:17",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 26166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14836:2:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "14812:26:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 26168,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14811:28:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "id": 26169,
                      "name": "_nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 26157,
                      "src": "14842:6:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "14811:37:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 26161,
                  "id": 26171,
                  "nodeType": "Return",
                  "src": "14804:44:17"
                }
              ]
            },
            "documentation": {
              "id": 26153,
              "nodeType": "StructuredDocumentation",
              "src": "14319:345:17",
              "text": " @notice Internal utility function that combines\n `_destination` and `_nonce`.\n @dev Both destination and nonce should be less than 2^32 - 1\n @param _destination Domain of destination chain\n @param _nonce Current nonce for given destination chain\n @return Returns (`_destination` << 32) & `_nonce`"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_destinationAndNonce",
            "parameters": {
              "id": 26158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26155,
                  "mutability": "mutable",
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 26173,
                  "src": "14699:19:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26154,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14699:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 26157,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 26173,
                  "src": "14720:13:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 26156,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14720:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14698:36:17"
            },
            "returnParameters": {
              "id": 26161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 26160,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 26173,
                  "src": "14782:6:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 26159,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "14782:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14781:8:17"
            },
            "scope": 26174,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 25643,
              "name": "Version0",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27006,
              "src": "976:8:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Version0_$27006",
                "typeString": "contract Version0"
              }
            },
            "id": 25644,
            "nodeType": "InheritanceSpecifier",
            "src": "976:8:17"
          },
          {
            "baseName": {
              "id": 25645,
              "name": "QueueManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26448,
              "src": "986:12:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_QueueManager_$26448",
                "typeString": "contract QueueManager"
              }
            },
            "id": 25646,
            "nodeType": "InheritanceSpecifier",
            "src": "986:12:17"
          },
          {
            "baseName": {
              "id": 25647,
              "name": "MerkleTreeManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26210,
              "src": "1000:17:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleTreeManager_$26210",
                "typeString": "contract MerkleTreeManager"
              }
            },
            "id": 25648,
            "nodeType": "InheritanceSpecifier",
            "src": "1000:17:17"
          },
          {
            "baseName": {
              "id": 25649,
              "name": "NomadBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26382,
              "src": "1019:9:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NomadBase_$26382",
                "typeString": "contract NomadBase"
              }
            },
            "id": 25650,
            "nodeType": "InheritanceSpecifier",
            "src": "1019:9:17"
          }
        ],
        "contractDependencies": [
          23168,
          23234,
          23523,
          26210,
          26382,
          26448,
          27006
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 25642,
          "nodeType": "StructuredDocumentation",
          "src": "602:356:17",
          "text": " @title Home\n @author Illusory Systems Inc.\n @notice Accepts messages to be dispatched to remote chains,\n constructs a Merkle tree of the messages,\n and accepts signatures from a bonded Updater\n which notarize the Merkle tree roots.\n Accepts submissions of fraudulent signatures\n by the Updater and slashes the Updater in this case."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          26174,
          26382,
          23168,
          23523,
          26210,
          26448,
          23234,
          27006
        ],
        "name": "Home",
        "scope": 26175
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 17
}