{
  "abi": [
    {
      "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": "uint64",
          "name": "originAndNonce",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidityProvider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "toDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "toId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "toHook",
          "type": "bool"
        }
      ],
      "name": "Send",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DUST_AMOUNT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_custom",
          "type": "address"
        }
      ],
      "name": "enrollCustom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_router",
          "type": "bytes32"
        }
      ],
      "name": "enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "handle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "liquidityProvider",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_oldRepr",
          "type": "address"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "remotes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_destination",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipient",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_destination",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_remoteHook",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "sendToHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenRegistry",
      "outputs": [
        {
          "internalType": "contract ITokenRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xAppConnectionManager",
      "outputs": [
        {
          "internalType": "contract XAppConnectionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50614992806100206000396000f3fe6080604052600436106101125760003560e01c806397f641ab116100a5578063b49c53a711610074578063ce5494bb11610059578063ce5494bb1461050f578063f2fde38b1461054f578063ffa1ad741461058f57610119565b8063b49c53a714610428578063bc7dbab31461045e57610119565b806397f641ab146102ce5780639d23c4c7146102e3578063a9bd1226146102f8578063ab2dc3f51461035857610119565b8063546d573d116100e1578063546d573d14610238578063715018a61461026257806383bbb806146102775780638da5cb5b146102b957610119565b806328b1aea01461011e5780633339df961461017257806341bdc8b5146101b0578063485cc955146101f057610119565b3661011957005b600080fd5b34801561012a57600080fd5b506101706004803603606081101561014157600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166105ba565b005b34801561017e57600080fd5b5061018761081e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101bc57600080fd5b50610170600480360360208110156101d357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661083a565b3480156101fc57600080fd5b506101706004803603604081101561021357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610929565b34801561024457600080fd5b506101876004803603602081101561025b57600080fd5b5035610a88565b34801561026e57600080fd5b50610170610ab0565b34801561028357600080fd5b506102a76004803603602081101561029a57600080fd5b503563ffffffff16610b5a565b60408051918252519081900360200190f35b3480156102c557600080fd5b50610187610b6c565b3480156102da57600080fd5b506102a7610b88565b3480156102ef57600080fd5b50610187610b93565b34801561030457600080fd5b50610170600480360360a081101561031b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff60408201351690606081013590608001351515610baf565b34801561036457600080fd5b506101706004803603608081101561037b57600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156103b357600080fd5b8201836020820111156103c557600080fd5b803590602001918460018302840111640100000000831117156103e757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d3b945050505050565b34801561043457600080fd5b506101706004803603604081101561044b57600080fd5b5063ffffffff8135169060200135610fab565b34801561046a57600080fd5b50610170600480360360a081101561048157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a0810160808201356401000000008111156104d057600080fd5b8201836020820111156104e257600080fd5b8035906020019184600183028401116401000000008311171561050457600080fd5b5090925090506110ff565b34801561051b57600080fd5b506101706004803603602081101561053257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112e9565b34801561055b57600080fd5b506101706004803603602081101561057257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115d5565b34801561059b57600080fd5b506105a4611777565b6040805160ff9092168252519081900360200190f35b6105c261177c565b73ffffffffffffffffffffffffffffffffffffffff166105e0610b6c565b73ffffffffffffffffffffffffffffffffffffffff161461066257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b1580156106d657600080fd5b505af11580156106ea573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b15801561076257600080fd5b505af1158015610776573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b15801561080157600080fd5b505af1158015610815573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b61084261177c565b73ffffffffffffffffffffffffffffffffffffffff16610860610b6c565b73ffffffffffffffffffffffffffffffffffffffff16146108e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff16806109425750610942611780565b80610950575060005460ff16155b6109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff16158015610a0b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055610a5482611791565b8015610a8357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610ab861177c565b73ffffffffffffffffffffffffffffffffffffffff16610ad6610b6c565b73ffffffffffffffffffffffffffffffffffffffff1614610b5857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b81610c1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080610c2887876118ee565b91509150610c3b8262ffffff1916611f10565b63ffffffff168563ffffffff1614610cb457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b6000610cc1858884611f7b565b9050610cce868483611fe0565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b610d4433612154565b610daf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8382610dbb82826121ff565b610e2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b6000610e5c610e35858361222b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001661224f565b90506000610e8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612284565b90506000610eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000084166122c8565b9050610ee77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612360565b15610efd57610ef88989848461236d565b610fa0565b610f287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166123ba565b15610f3957610ef8898984846123c7565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b610fb361177c565b73ffffffffffffffffffffffffffffffffffffffff16610fd1610b6c565b73ffffffffffffffffffffffffffffffffffffffff161461105357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61105b61272c565b63ffffffff168263ffffffff161415801561107b575063ffffffff821615155b6110e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b60008061110c88886118ee565b90925090508461117d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6111a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611f10565b63ffffffff168663ffffffff161461122157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061126e868984611232336127c8565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127e192505050565b905061127b878483611fe0565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff808216908316141561141657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b15801561148757600080fd5b505afa15801561149b573d6000803e3d6000fd5b505050506040513d60208110156114b157600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b15801561152b57600080fd5b505af115801561153f573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b1580156115b757600080fd5b505af11580156115cb573d6000803e3d6000fd5b5050505050505050565b6115dd61177c565b73ffffffffffffffffffffffffffffffffffffffff166115fb610b6c565b73ffffffffffffffffffffffffffffffffffffffff161461167d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806147ff6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b3390565b600061178b306128b1565b15905090565b600054610100900460ff16806117aa57506117aa611780565b806117b8575060005460ff16155b61180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff1615801561187357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556118bb6128b7565b80156118ea57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000806000831161196057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b1580156119d657600080fd5b505afa1580156119ea573d6000803e3d6000fd5b505050506040513d6020811015611a0057600080fd5b505115611d4e57611a2973ffffffffffffffffffffffffffffffffffffffff86163330876129db565b611d478173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7457600080fd5b505af1158015611a88573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611acf57600080fd5b8101908080516040519392919084640100000000821115611aef57600080fd5b908301906020820185811115611b0457600080fd5b8251640100000000811182820188101715611b1e57600080fd5b82525081516020918201929091019080838360005b83811015611b4b578181015183820152602001611b33565b50505050905090810190601f168015611b785780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611c2057600080fd5b8101908080516040519392919084640100000000821115611c4057600080fd5b908301906020820185811115611c5557600080fd5b8251640100000000811182820188101715611c6f57600080fd5b82525081516020918201929091019080838360005b83811015611c9c578181015183820152602001611c84565b50505050905090810190601f168015611cc95780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1657600080fd5b505afa158015611d2a573d6000803e3d6000fd5b505050506040513d6020811015611d4057600080fd5b5051612a76565b9150611e4f565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b158015611ec257600080fd5b505afa158015611ed6573d6000803e3d6000fd5b505050506040513d6040811015611eec57600080fd5b5080516020909101519092509050611f048282612bb1565b94505050509250929050565b6000816001611f43815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690612c08565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004612d88565b949350505050565b6000611fd660038086868660405160200180856006811115611f9957fe5b60f81b815260010184815260200183815260200182815260200194505050505060405160208183030381529060405261222b90919063ffffffff16565b90505b9392505050565b6000611feb84612da9565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561205557600080fd5b505afa158015612069573d6000803e3d6000fd5b505050506040513d602081101561207f57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de0185836120a88787612e2b565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121065781810151838201526020016120ee565b50505050905090810190601f1680156121335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156115b757600080fd5b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b1580156121cb57600080fd5b505afa1580156121df573d6000803e3d6000fd5b505050506040513d60208110156121f557600080fd5b505190505b919050565b63ffffffff82166000908152609760205260408120548214801561222257508115155b90505b92915050565b81516000906020840161224664ffffffffff85168284612f3f565b95945050505050565b600061222561225d83612f95565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612fe1565b600081600261229281611f1a565b50611f736000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000881692919061305b565b60008160026122d681611f1a565b50600060246123067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000087166130e1565b6bffffffffffffffffffffffff160390506000612322866130f5565b60ff1690506123567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000087166024848461305b565b9695505050505050565b6000612225826003613126565b600061239a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613173565b90506123a985858585856131af565b506123b381613452565b5050505050565b6000612225826005613126565b60006123f47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166134c2565b9050600061240586868686866131af565b905060007f048494fe00000000000000000000000000000000000000000000000000000000876124567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000087166134d0565b6124817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916611f10565b6124ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a1661350e565b866124d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b1661354c565b61252d6125067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d1661357d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000166135d3565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125b357818101518382015260200161259b565b50505050905090810190601f1680156125e05780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083106126b157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612674565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612713576040519150601f19603f3d011682016040523d82523d6000602084013e612718565b606091505b50509050806115cb573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561279757600080fd5b505afa1580156127ab573d6000803e3d6000fd5b505050506040513d60208110156127c157600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061235660058088888888886040516020018087600681111561280157fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061286a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161282d565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405261222b90919063ffffffff16565b3b151590565b600054610100900460ff16806128d057506128d0611780565b806128de575060005460ff16155b612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff1615801561299957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6129a1613617565b6129a9613729565b80156129d857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612a709085906138b9565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310612ad557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a98565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310612b5d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612b20565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b60006122226001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16602082015260248082018790528251808303909101815260449091019091529061222b565b6000612c148383613991565b612d81576000612c32612c26856139b3565b64ffffffffff166139b9565b9150506000612c478464ffffffffff166139b9565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b83811015612d46578181015183820152602001612d2e565b50505050905090810190601f168015612d735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff16612d9f858585613a8d565b901c949350505050565b63ffffffff8116600090815260976020526040902054806121fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060826001612e3981611f1a565b50612e4384613bfb565b612eae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508581600081518110612edd57fe5b602002602001019062ffffff1916908162ffffff1916815250508481600181518110612f0557fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092166020928302919091019091015261235681613c15565b600080612f4c8484613c65565b9050604051811115612f5c575060005b80612f8a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611fd9565b612246858585613cd7565b6000612fa082613cea565b15612fd957612fd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166002613d3c565b90506121fa565b612225613d62565b6000612fec82613d86565b61305757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b60008061306786613dc3565b6bffffffffffffffffffffffff16905061308086613dd7565b6130948561308e8489613c65565b90613c65565b11156130c3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611f73565b6130cd8186613c65565b90506123568364ffffffffff168286612f3f565b60181c6bffffffffffffffffffffffff1690565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001612d88565b600081600681111561313457fe5b60ff1661314084613e01565b60ff16148015612222575081600681111561315757fe5b61316084613e31565b600681111561316b57fe5b149392505050565b600081600361318181611f1a565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d613e6c565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a6131fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716611f10565b6132267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000881661350e565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b15801561326957600080fd5b505af115801561327d573d6000803e3d6000fd5b505050506040513d602081101561329357600080fd5b5051905060006132c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851661354c565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d602081101561336357600080fd5b50511561337a57613375828285613e7a565b6133b0565b6133b08282856133ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916613e9b565b613ecc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166133e88989613fa8565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613486575066d529ae9e8600004710155b156129d85760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b600081600561318181611f1a565b60008160056134de81611f1a565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660616020613a8d565b600081600161351c81611f1a565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660046020613a8d565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020612d88565b600081600561358b81611f1a565b50611f736081806135bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088166130e1565b6bffffffffffffffffffffffff1603600661229d565b60606000806135e1846130e1565b6bffffffffffffffffffffffff16905060405191508192506136068483602001613fc2565b508181016020016040529052919050565b600054610100900460ff16806136305750613630611780565b8061363e575060005460ff16155b613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff161580156129a957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156129d857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806137425750613742611780565b80613750575060005460ff16155b6137a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff1615801561380b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061381561177c565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156129d857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061391b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166140ee9092919063ffffffff16565b805190915015610a835780806020019051602081101561393a57600080fd5b5051610a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806148d4602a913960400191505060405180910390fd5b60008164ffffffffff166139a4846139b3565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff161115613a215760ff600882021684901c6139de816140fd565b61ffff16841793508160ff166010146139f957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016139bf565b50600f5b60ff8160ff161015613a875760ff600882021684901c613a44816140fd565b61ffff16831792508160ff16600014613a5f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613a25565b50915091565b600060ff8216613a9f57506000611fd9565b613aa8846130e1565b6bffffffffffffffffffffffff16613ac38460ff8516613c65565b1115613b6557613b04613ad585613dc3565b6bffffffffffffffffffffffff16613aec866130e1565b6bffffffffffffffffffffffff16858560ff1661412d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612d46578181015183820152602001612d2e565b60208260ff161115613bc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061489a603a913960400191505060405180910390fd5b600882026000613bd186613dc3565b6bffffffffffffffffffffffff1690506000613bec83614288565b91909501511695945050505050565b6000613c0682612360565b806122255750612225826123ba565b6040516060906000613c2a84602084016142d1565b90506000613c37826130e1565b6bffffffffffffffffffffffff1690506000613c5283614349565b9184525082016020016040525092915050565b8181018281101561222557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b600080613d187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000084166130e1565b6bffffffffffffffffffffffff1690506085811480611fd9575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b6000613d91826139b3565b64ffffffffff1664ffffffffff1415613dac575060006121fa565b6000613db783613dd7565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b6000613de2826130e1565b613deb83613dc3565b016bffffffffffffffffffffffff169050919050565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001612d88565b6000613e5e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166139b3565b60ff16600681111561222557fe5b600061222283836014612d88565b610a8373ffffffffffffffffffffffffffffffffffffffff8416828461435d565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660416020613a8d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613f3d57600080fd5b505af1158015613f51573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156115b757600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b6000613fcd836143ea565b614022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806148fe6028913960400191505060405180910390fd5b61402b83613d86565b614080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614926602b913960400191505060405180910390fd5b600061408b846130e1565b6bffffffffffffffffffffffff16905060006140a685613dc3565b6bffffffffffffffffffffffff16905060006040519050848111156140cb5760206060fd5b8285848460045afa506123566140e0876139b3565b64ffffffffff168685613cd7565b6060611fd684846000856143fc565b600061410f60048360ff16901c6145b6565b60ff161760081b62ffff0016614124826145b6565b60ff1617919050565b6060600061413a866139b9565b9150506000614148866139b9565b9150506000614156866139b9565b9150506000614164866139b9565b915050838383836040516020018080614951603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161484b82397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000604051828111156142e45760206060fd5b506000805b845181101561433c57600085828151811061430057fe5b6020026020010151905061431681848701613fc2565b50614320816130e1565b6bffffffffffffffffffffffff169290920191506001016142e9565b50611f7360008483613cd7565b600061435482614722565b60200292915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a839084906138b9565b60006143f582614756565b1592915050565b606082471015614457576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148256026913960400191505060405180910390fd5b614460856128b1565b6144cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061453457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016144f7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614596576040519150601f19603f3d011682016040523d82523d6000602084013e61459b565b606091505b50915091506145ab82828661477e565b979650505050505050565b600060f08083179060ff821614156145d25760309150506121fa565b8060ff1660f114156145e85760319150506121fa565b8060ff1660f214156145fe5760329150506121fa565b8060ff1660f314156146145760339150506121fa565b8060ff1660f4141561462a5760349150506121fa565b8060ff1660f514156146405760359150506121fa565b8060ff1660f614156146565760369150506121fa565b8060ff1660f7141561466c5760379150506121fa565b8060ff1660f814156146825760389150506121fa565b8060ff1660f914156146985760399150506121fa565b8060ff1660fa14156146ae5760619150506121fa565b8060ff1660fb14156146c45760629150506121fa565b8060ff1660fc14156146da5760639150506121fa565b8060ff1660fd14156146f05760649150506121fa565b8060ff1660fe14156147065760659150506121fa565b8060ff1660ff141561471c5760669150506121fa565b50919050565b600060206147486020614734856130e1565b6bffffffffffffffffffffffff1690613c65565b8161474f57fe5b0492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b6060831561478d575081611fd9565b82511561479d5782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315612d46578181015183820152602001612d2e56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "19588:46:34:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106101125760003560e01c806397f641ab116100a5578063b49c53a711610074578063ce5494bb11610059578063ce5494bb1461050f578063f2fde38b1461054f578063ffa1ad741461058f57610119565b8063b49c53a714610428578063bc7dbab31461045e57610119565b806397f641ab146102ce5780639d23c4c7146102e3578063a9bd1226146102f8578063ab2dc3f51461035857610119565b8063546d573d116100e1578063546d573d14610238578063715018a61461026257806383bbb806146102775780638da5cb5b146102b957610119565b806328b1aea01461011e5780633339df961461017257806341bdc8b5146101b0578063485cc955146101f057610119565b3661011957005b600080fd5b34801561012a57600080fd5b506101706004803603606081101561014157600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166105ba565b005b34801561017e57600080fd5b5061018761081e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156101bc57600080fd5b50610170600480360360208110156101d357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661083a565b3480156101fc57600080fd5b506101706004803603604081101561021357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610929565b34801561024457600080fd5b506101876004803603602081101561025b57600080fd5b5035610a88565b34801561026e57600080fd5b50610170610ab0565b34801561028357600080fd5b506102a76004803603602081101561029a57600080fd5b503563ffffffff16610b5a565b60408051918252519081900360200190f35b3480156102c557600080fd5b50610187610b6c565b3480156102da57600080fd5b506102a7610b88565b3480156102ef57600080fd5b50610187610b93565b34801561030457600080fd5b50610170600480360360a081101561031b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff60408201351690606081013590608001351515610baf565b34801561036457600080fd5b506101706004803603608081101561037b57600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156103b357600080fd5b8201836020820111156103c557600080fd5b803590602001918460018302840111640100000000831117156103e757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d3b945050505050565b34801561043457600080fd5b506101706004803603604081101561044b57600080fd5b5063ffffffff8135169060200135610fab565b34801561046a57600080fd5b50610170600480360360a081101561048157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a0810160808201356401000000008111156104d057600080fd5b8201836020820111156104e257600080fd5b8035906020019184600183028401116401000000008311171561050457600080fd5b5090925090506110ff565b34801561051b57600080fd5b506101706004803603602081101561053257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112e9565b34801561055b57600080fd5b506101706004803603602081101561057257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115d5565b34801561059b57600080fd5b506105a4611777565b6040805160ff9092168252519081900360200190f35b6105c261177c565b73ffffffffffffffffffffffffffffffffffffffff166105e0610b6c565b73ffffffffffffffffffffffffffffffffffffffff161461066257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b1580156106d657600080fd5b505af11580156106ea573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b15801561076257600080fd5b505af1158015610776573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b15801561080157600080fd5b505af1158015610815573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b61084261177c565b73ffffffffffffffffffffffffffffffffffffffff16610860610b6c565b73ffffffffffffffffffffffffffffffffffffffff16146108e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff16806109425750610942611780565b80610950575060005460ff16155b6109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff16158015610a0b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055610a5482611791565b8015610a8357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610ab861177c565b73ffffffffffffffffffffffffffffffffffffffff16610ad6610b6c565b73ffffffffffffffffffffffffffffffffffffffff1614610b5857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b81610c1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080610c2887876118ee565b91509150610c3b8262ffffff1916611f10565b63ffffffff168563ffffffff1614610cb457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b6000610cc1858884611f7b565b9050610cce868483611fe0565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b610d4433612154565b610daf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8382610dbb82826121ff565b610e2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b6000610e5c610e35858361222b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001661224f565b90506000610e8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612284565b90506000610eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000084166122c8565b9050610ee77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612360565b15610efd57610ef88989848461236d565b610fa0565b610f287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000082166123ba565b15610f3957610ef8898984846123c7565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b610fb361177c565b73ffffffffffffffffffffffffffffffffffffffff16610fd1610b6c565b73ffffffffffffffffffffffffffffffffffffffff161461105357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61105b61272c565b63ffffffff168263ffffffff161415801561107b575063ffffffff821615155b6110e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b60008061110c88886118ee565b90925090508461117d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6111a87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316611f10565b63ffffffff168663ffffffff161461122157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061126e868984611232336127c8565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127e192505050565b905061127b878483611fe0565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b15801561136057600080fd5b505afa158015611374573d6000803e3d6000fd5b505050506040513d602081101561138a57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff808216908316141561141657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b15801561148757600080fd5b505afa15801561149b573d6000803e3d6000fd5b505050506040513d60208110156114b157600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b15801561152b57600080fd5b505af115801561153f573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b1580156115b757600080fd5b505af11580156115cb573d6000803e3d6000fd5b5050505050505050565b6115dd61177c565b73ffffffffffffffffffffffffffffffffffffffff166115fb610b6c565b73ffffffffffffffffffffffffffffffffffffffff161461167d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806147ff6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b3390565b600061178b306128b1565b15905090565b600054610100900460ff16806117aa57506117aa611780565b806117b8575060005460ff16155b61180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff1615801561187357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556118bb6128b7565b80156118ea57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000806000831161196057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b1580156119d657600080fd5b505afa1580156119ea573d6000803e3d6000fd5b505050506040513d6020811015611a0057600080fd5b505115611d4e57611a2973ffffffffffffffffffffffffffffffffffffffff86163330876129db565b611d478173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7457600080fd5b505af1158015611a88573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611acf57600080fd5b8101908080516040519392919084640100000000821115611aef57600080fd5b908301906020820185811115611b0457600080fd5b8251640100000000811182820188101715611b1e57600080fd5b82525081516020918201929091019080838360005b83811015611b4b578181015183820152602001611b33565b50505050905090810190601f168015611b785780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611c2057600080fd5b8101908080516040519392919084640100000000821115611c4057600080fd5b908301906020820185811115611c5557600080fd5b8251640100000000811182820188101715611c6f57600080fd5b82525081516020918201929091019080838360005b83811015611c9c578181015183820152602001611c84565b50505050905090810190601f168015611cc95780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611d1657600080fd5b505afa158015611d2a573d6000803e3d6000fd5b505050506040513d6020811015611d4057600080fd5b5051612a76565b9150611e4f565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b158015611ec257600080fd5b505afa158015611ed6573d6000803e3d6000fd5b505050506040513d6040811015611eec57600080fd5b5080516020909101519092509050611f048282612bb1565b94505050509250929050565b6000816001611f43815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690612c08565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004612d88565b949350505050565b6000611fd660038086868660405160200180856006811115611f9957fe5b60f81b815260010184815260200183815260200182815260200194505050505060405160208183030381529060405261222b90919063ffffffff16565b90505b9392505050565b6000611feb84612da9565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561205557600080fd5b505afa158015612069573d6000803e3d6000fd5b505050506040513d602081101561207f57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de0185836120a88787612e2b565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121065781810151838201526020016120ee565b50505050905090810190601f1680156121335780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156115b757600080fd5b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b1580156121cb57600080fd5b505afa1580156121df573d6000803e3d6000fd5b505050506040513d60208110156121f557600080fd5b505190505b919050565b63ffffffff82166000908152609760205260408120548214801561222257508115155b90505b92915050565b81516000906020840161224664ffffffffff85168284612f3f565b95945050505050565b600061222561225d83612f95565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612fe1565b600081600261229281611f1a565b50611f736000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000881692919061305b565b60008160026122d681611f1a565b50600060246123067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000087166130e1565b6bffffffffffffffffffffffff160390506000612322866130f5565b60ff1690506123567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000087166024848461305b565b9695505050505050565b6000612225826003613126565b600061239a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613173565b90506123a985858585856131af565b506123b381613452565b5050505050565b6000612225826005613126565b60006123f47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166134c2565b9050600061240586868686866131af565b905060007f048494fe00000000000000000000000000000000000000000000000000000000876124567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000087166134d0565b6124817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916611f10565b6124ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a1661350e565b866124d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b1661354c565b61252d6125067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d1661357d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000166135d3565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125b357818101518382015260200161259b565b50505050905090810190601f1680156125e05780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b602083106126b157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612674565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612713576040519150601f19603f3d011682016040523d82523d6000602084013e612718565b606091505b50509050806115cb573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561279757600080fd5b505afa1580156127ab573d6000803e3d6000fd5b505050506040513d60208110156127c157600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061235660058088888888886040516020018087600681111561280157fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061286a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161282d565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405261222b90919063ffffffff16565b3b151590565b600054610100900460ff16806128d057506128d0611780565b806128de575060005460ff16155b612933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff1615801561299957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6129a1613617565b6129a9613729565b80156129d857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612a709085906138b9565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310612ad557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a98565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310612b5d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612b20565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b60006122226001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16602082015260248082018790528251808303909101815260449091019091529061222b565b6000612c148383613991565b612d81576000612c32612c26856139b3565b64ffffffffff166139b9565b9150506000612c478464ffffffffff166139b9565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b83811015612d46578181015183820152602001612d2e565b50505050905090810190601f168015612d735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff16612d9f858585613a8d565b901c949350505050565b63ffffffff8116600090815260976020526040902054806121fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060826001612e3981611f1a565b50612e4384613bfb565b612eae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508581600081518110612edd57fe5b602002602001019062ffffff1916908162ffffff1916815250508481600181518110612f0557fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092166020928302919091019091015261235681613c15565b600080612f4c8484613c65565b9050604051811115612f5c575060005b80612f8a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611fd9565b612246858585613cd7565b6000612fa082613cea565b15612fd957612fd27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166002613d3c565b90506121fa565b612225613d62565b6000612fec82613d86565b61305757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b60008061306786613dc3565b6bffffffffffffffffffffffff16905061308086613dd7565b6130948561308e8489613c65565b90613c65565b11156130c3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050611f73565b6130cd8186613c65565b90506123568364ffffffffff168286612f3f565b60181c6bffffffffffffffffffffffff1690565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001612d88565b600081600681111561313457fe5b60ff1661314084613e01565b60ff16148015612222575081600681111561315757fe5b61316084613e31565b600681111561316b57fe5b149392505050565b600081600361318181611f1a565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d613e6c565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a6131fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716611f10565b6132267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000881661350e565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b15801561326957600080fd5b505af115801561327d573d6000803e3d6000fd5b505050506040513d602081101561329357600080fd5b5051905060006132c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851661354c565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d602081101561336357600080fd5b50511561337a57613375828285613e7a565b6133b0565b6133b08282856133ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008916613e9b565b613ecc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166133e88989613fa8565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613486575066d529ae9e8600004710155b156129d85760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b600081600561318181611f1a565b60008160056134de81611f1a565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660616020613a8d565b600081600161351c81611f1a565b50611f737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660046020613a8d565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020612d88565b600081600561358b81611f1a565b50611f736081806135bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088166130e1565b6bffffffffffffffffffffffff1603600661229d565b60606000806135e1846130e1565b6bffffffffffffffffffffffff16905060405191508192506136068483602001613fc2565b508181016020016040529052919050565b600054610100900460ff16806136305750613630611780565b8061363e575060005460ff16155b613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff161580156129a957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091166101001716600117905580156129d857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806137425750613742611780565b80613750575060005460ff16155b6137a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061486c602e913960400191505060405180910390fd5b600054610100900460ff1615801561380b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061381561177c565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156129d857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061391b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166140ee9092919063ffffffff16565b805190915015610a835780806020019051602081101561393a57600080fd5b5051610a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806148d4602a913960400191505060405180910390fd5b60008164ffffffffff166139a4846139b3565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff161115613a215760ff600882021684901c6139de816140fd565b61ffff16841793508160ff166010146139f957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016139bf565b50600f5b60ff8160ff161015613a875760ff600882021684901c613a44816140fd565b61ffff16831792508160ff16600014613a5f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613a25565b50915091565b600060ff8216613a9f57506000611fd9565b613aa8846130e1565b6bffffffffffffffffffffffff16613ac38460ff8516613c65565b1115613b6557613b04613ad585613dc3565b6bffffffffffffffffffffffff16613aec866130e1565b6bffffffffffffffffffffffff16858560ff1661412d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612d46578181015183820152602001612d2e565b60208260ff161115613bc2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a81526020018061489a603a913960400191505060405180910390fd5b600882026000613bd186613dc3565b6bffffffffffffffffffffffff1690506000613bec83614288565b91909501511695945050505050565b6000613c0682612360565b806122255750612225826123ba565b6040516060906000613c2a84602084016142d1565b90506000613c37826130e1565b6bffffffffffffffffffffffff1690506000613c5283614349565b9184525082016020016040525092915050565b8181018281101561222557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b600080613d187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000084166130e1565b6bffffffffffffffffffffffff1690506085811480611fd9575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b6000613d91826139b3565b64ffffffffff1664ffffffffff1415613dac575060006121fa565b6000613db783613dd7565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b6000613de2826130e1565b613deb83613dc3565b016bffffffffffffffffffffffff169050919050565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001612d88565b6000613e5e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166139b3565b60ff16600681111561222557fe5b600061222283836014612d88565b610a8373ffffffffffffffffffffffffffffffffffffffff8416828461435d565b60006122257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660416020613a8d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613f3d57600080fd5b505af1158015613f51573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156115b757600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b6000613fcd836143ea565b614022576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806148fe6028913960400191505060405180910390fd5b61402b83613d86565b614080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614926602b913960400191505060405180910390fd5b600061408b846130e1565b6bffffffffffffffffffffffff16905060006140a685613dc3565b6bffffffffffffffffffffffff16905060006040519050848111156140cb5760206060fd5b8285848460045afa506123566140e0876139b3565b64ffffffffff168685613cd7565b6060611fd684846000856143fc565b600061410f60048360ff16901c6145b6565b60ff161760081b62ffff0016614124826145b6565b60ff1617919050565b6060600061413a866139b9565b9150506000614148866139b9565b9150506000614156866139b9565b9150506000614164866139b9565b915050838383836040516020018080614951603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161484b82397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000604051828111156142e45760206060fd5b506000805b845181101561433c57600085828151811061430057fe5b6020026020010151905061431681848701613fc2565b50614320816130e1565b6bffffffffffffffffffffffff169290920191506001016142e9565b50611f7360008483613cd7565b600061435482614722565b60200292915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a839084906138b9565b60006143f582614756565b1592915050565b606082471015614457576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148256026913960400191505060405180910390fd5b614460856128b1565b6144cb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061453457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016144f7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614596576040519150601f19603f3d011682016040523d82523d6000602084013e61459b565b606091505b50915091506145ab82828661477e565b979650505050505050565b600060f08083179060ff821614156145d25760309150506121fa565b8060ff1660f114156145e85760319150506121fa565b8060ff1660f214156145fe5760329150506121fa565b8060ff1660f314156146145760339150506121fa565b8060ff1660f4141561462a5760349150506121fa565b8060ff1660f514156146405760359150506121fa565b8060ff1660f614156146565760369150506121fa565b8060ff1660f7141561466c5760379150506121fa565b8060ff1660f814156146825760389150506121fa565b8060ff1660f914156146985760399150506121fa565b8060ff1660fa14156146ae5760619150506121fa565b8060ff1660fb14156146c45760629150506121fa565b8060ff1660fc14156146da5760639150506121fa565b8060ff1660fd14156146f05760649150506121fa565b8060ff1660fe14156147065760659150506121fa565b8060ff1660ff141561471c5760669150506121fa565b50919050565b600060206147486020614734856130e1565b6bffffffffffffffffffffffff1690613c65565b8161474f57fe5b0492915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b6060831561478d575081611fd9565b82511561479d5782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315612d46578181015183820152602001612d2e56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "19588:46:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7988:409;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7988:409:34;;;;;;;;;;;;;;;;:::i;:::-;;504:50:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1353:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1353:191:80;;;;:::i;3631:245:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3631:245:34;;;;;;;;;;;:::i;1838:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1838:52:34;;:::i;19469:84::-;;;;;;;;;;;;;:::i;456:41:79:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;456:41:79;;;;:::i;:::-;;;;;;;;;;;;;;;;1335:85:7;;;;;;;;;;;;;:::i;1474:48:34:-;;;;;;;;;;;;;:::i;1638:35::-;;;;;;;;;;;;;:::i;5240:977::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5240:977:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4201:734::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4201:734:34;;-1:-1:-1;4201:734:34;;-1:-1:-1;;;;;4201:734:34:i;1242:214:79:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1242:214:79;;;;;;;;;:::i;6584:987:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6584:987:34;;-1:-1:-1;6584:987:34;-1:-1:-1;6584:987:34;:::i;8830:452::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8830:452:34;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;171:33:68:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7988:409:34;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8233:44:34::1;::::0;;;;;8268:4:::1;8233:44;::::0;::::1;::::0;8275:1:::1;8233:44:::0;;;;;;:26:::1;::::0;::::1;::::0;::::1;::::0;:44;;;;;-1:-1:-1;;8233:44:34;;;;;;;-1:-1:-1;8233:26:34;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8287:44:34::1;::::0;;;;;8322:4:::1;8287:44;::::0;::::1;::::0;8329:1:::1;8287:44:::0;;;;;;:26:::1;::::0;::::1;::::0;-1:-1:-1;8287:26:34::1;::::0;-1:-1:-1;8287:44:34;;;;;-1:-1:-1;;8287:44:34;;;;;;;-1:-1:-1;8287:26:34;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8341:13:34::1;::::0;:49:::1;::::0;;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;;;;:13:::1;:49:::0;;::::1;::::0;;;;;;:13;;;::::1;::::0;-1:-1:-1;8341:26:34::1;::::0;-1:-1:-1;8341:49:34;;;;;:13:::1;::::0;:49;;;;;;;:13;;:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7988:409:::0;;;:::o;504:50:80:-;;;;;;:::o;1353:191::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1468:21:80::1;:69:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1353:191::o;3631:245:34:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;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;3756:13:34::1;:46:::0;;;::::1;;::::0;::::1;;::::0;;3812:57:::1;3846:22:::0;3812:33:::1;:57::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;3631:245:34;;;:::o;1838:52::-;;;;;;;;;;;;;;;:::o;19469:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:84:34:o;456:41:79:-;;;;;;;;;;;;;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;1474:48:34:-;1512:10;1474:48;:::o;1638:35::-;;;;;;:::o;5240:977::-;5513:24;5505:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5599:16;5617:20;5641:28;5653:6;5661:7;5641:11;:28::i;:::-;5598:71;;;;5716:17;:8;:15;;;;:17::i;:::-;5700:33;;:12;:33;;;5679:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:15;5848:109;5890:10;5914:7;5935:12;5848:28;:109::i;:::-;5830:127;;6026:53;6047:12;6061:8;6071:7;6026:20;:53::i;:::-;6144:66;;;;;;;;;;;;6204:5;6144:66;;;;;;;;;;6157:10;;6144:66;;;;;;;;;;;;;;5240:977;;;;;;;;:::o;4201:734::-;786:22:80;797:10;786;:22::i;:::-;778:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4373:7:34::1;4382;885:33:79;901:7;910;885:15;:33::i;:::-;877:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4450:12:34::2;4465:31;:15;:8:::0;4450:12;4465::::2;:15::i;:::-;:29:::0;::::2;;:31::i;:::-;4450:46:::0;-1:-1:-1;4506:16:34::2;4525:14;:12:::0;;::::2;;:14::i;:::-;4506:33:::0;-1:-1:-1;4549:15:34::2;4567:13;:11:::0;;::::2;;:13::i;:::-;4549:31:::0;-1:-1:-1;4649:20:34::2;:18:::0;;::::2;;:20::i;:::-;4645:284;;;4685:51;4701:7;4710:6;4718:8;4728:7;4685:15;:51::i;:::-;4645:284;;;4757:26;:24:::0;;::::2;;:26::i;:::-;4753:176;;;4799:57;4821:7;4830:6;4838:8;4848:7;4799:21;:57::i;4753:176::-;4887:31;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;947:1:79;;;831::80::1;;4201:734:34::0;;;;:::o;1242:214:79:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1371:14:79::1;:12;:14::i;:::-;1360:25;;:7;:25;;;;:41;;;;-1:-1:-1::0;1389:12:79::1;::::0;::::1;::::0;::::1;1360:41;1352:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1423:16;::::0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:26;1242:214::o;6584:987:34:-;6812:16;6830:20;6854:28;6866:6;6874:7;6854:11;:28::i;:::-;6811:71;;-1:-1:-1;6811:71:34;-1:-1:-1;6900:25:34;6892:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6982:17;:15;;;;:17::i;:::-;6966:33;;:12;:33;;;6945:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7101:15;7119:192;7167:11;7192:7;7213:12;7239:38;7266:10;7239:26;:38::i;:::-;7291:10;;7119:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7119:34:34;;-1:-1:-1;;;7119:192:34:i;:::-;7101:210;;7380:53;7401:12;7415:8;7425:7;7380:20;:53::i;:::-;7498:66;;;;;;;;;;;;7559:4;7498:66;;;;;;;;;;7511:10;;7498:66;;;;;;;;;;;;;;6584:987;;;;;;;;;:::o;8830:452::-;8907:13;;:44;;;;;;:13;:44;;;;;;;;;8884:20;;8907:13;;;;;:34;;:44;;;;;;;;;;;;;;;:13;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8907:44:34;;-1:-1:-1;8969:24:34;;;;;;;;;8961:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9153:26;;;;;;9168:10;9153:26;;;;;;9119:8;;9086:17;;9153:14;;;;;;:26;;;;;;;;;;;;;;:14;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9153:26:34;9189:27;;;;;;9199:10;9189:27;;;;;;;;;;;;9153:26;;-1:-1:-1;9189:9:34;;;;;;:27;;;;;-1:-1:-1;;9189:27:34;;;;;;;;-1:-1:-1;9189:9:34;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9226:49:34;;;;;;9258:10;9226:49;;;;;;;;;;;;:31;;;;-1:-1:-1;9226:31:34;;-1:-1:-1;9226:49:34;;;;;-1:-1:-1;;9226:49:34;;;;;;;-1:-1:-1;9226:31:34;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8830:452;;;;:::o;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;171:33:68:-;203:1;171:33;:::o;828:104:18:-;915:10;828:104;:::o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;884:228:80:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;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;1010:21:80::1;:69:::0;;;::::1;;::::0;::::1;;::::0;;1089:16:::1;:14;:16::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;884:228:80;;:::o;9813:1239:34:-;9901:16;9919:20;10015:1;10005:7;:11;9997:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10191:13;;:35;;;;;;:13;:35;;;;;;;;;10114:6;;10191:13;;;;;:27;;:35;;;;;;;;;;;;;;;:13;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10191:35:34;10187:696;;;10351:67;:31;;;10383:10;10403:4;10410:7;10351:31;:67::i;:::-;10521:129;10567:2;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10567:9:34;;;;;;;;;;-1:-1:-1;10567:9:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10594:2;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10594:11:34;;;;;;;;;;-1:-1:-1;10594:11:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10623:2;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10623:13:34;10521:28;:129::i;:::-;10506:144;;10187:696;;;10799:28;;;;;;10807:10;10799:28;;;;;;;;;;;;:7;;;;;;:28;;;;;-1:-1:-1;;10799:28:34;;;;;;;-1:-1:-1;10799:7:34;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10856:2;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10856:16:34;;-1:-1:-1;10187:696:34;10951:13;;:32;;;;;;:13;:32;;;;;;;;;10920:14;;;;10951:13;;;:24;;:32;;;;;;;;;;;;:13;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10951:32:34;;;;;;;;;-1:-1:-1;10951:32:34;-1:-1:-1;11004:41:34;10951:32;;11004:27;:41::i;:::-;10993:52;;9813:1239;;;;;;;;:::o;8465:193:33:-;8590:6;8548:8;8558:13;2754:28;8558:13;2771:10;2754:16;;;;;:28::i;:::-;-1:-1:-1;8626:24:33::1;:18:::0;;::::1;8645:1;8648;8626:18;:24::i;:::-;8612:39:::0;8465:193;-1:-1:-1;;;;8465:193:33:o;5595:288::-;5722:7;5760:116;5847:14;5777;5793:3;5798:5;5805:12;5760:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:62;;:116;;;;:::i;:::-;5741:135;;5595:288;;;;;;:::o;11542:473:34:-;11741:15;11759:29;11775:12;11759:15;:29::i;:::-;11741:47;;11853:21;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11853:28:34;11848:43;;;11905:12;11931:7;11952:46;11980:8;11990:7;11952:27;:46::i;:::-;11848:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2092:178:80;2213:21;;:50;;;;;;:21;:50;;;;;;;;;2186:4;;2213:21;;;;;:31;;:50;;;;;;;;;;;;;;;:21;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2213:50:80;;-1:-1:-1;2092:178:80;;;;:::o;1973:191:79:-;2105:16;;;2078:4;2105:16;;;:7;:16;;;;;;:27;;:52;;;;-1:-1:-1;2136:21:79;;;2105:52;2098:59;;1973:191;;;;;:::o;13237:368:32:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;13237:368;-1:-1:-1;;;;;13237:368:32:o;14300:127:33:-;14361:7;14387:33;:19;14400:5;14387:12;:19::i;:::-;:31;;;:33::i;11640:217::-;11766:7;11724:8;11734:13;2754:28;11734:13;2771:10;;2754:28;-1:-1:-1;11796:54:33::1;11811:1;2120:2;11835:13;11828:21;11796:14:::0;;::::1;::::0;:54;;:14:::1;:54::i;13474:319::-:0;13599:7;13557:8;13567:13;2754:28;13567:13;2771:10;;2754:28;-1:-1:-1;13622:18:33::1;2120:2;13643:14;:12:::0;;::::1;;:14::i;:::-;:29;;;13622:50;;13682:12;13704:17;13712:8;13704:7;:17::i;:::-;13697:25;;::::0;-1:-1:-1;13739:47:33::1;:14:::0;;::::1;2120:2;13768:10:::0;13697:25;13739:14:::1;:47::i;:::-;13732:54:::0;13474:319;-1:-1:-1;;;;;;13474:319:33:o;4923:121::-;4983:4;5006:31;5013:7;5022:14;5006:6;:31::i;12529:421:34:-;12735:18;12756:22;:20;;;;:22::i;:::-;12735:43;;12811:59;12823:7;12832:6;12840:8;12850:7;12859:10;12811:11;:59::i;:::-;;12926:17;12932:10;12926:5;:17::i;:::-;12529:421;;;;;:::o;5226:133:33:-;5292:4;5315:37;5322:7;5331:20;5315:6;:37::i;13426:1292:34:-;13634:13;13650:17;:15;;;;:17::i;:::-;13634:33;;13700:14;13717:54;13729:7;13738:6;13746:8;13756:7;13765:5;13717:11;:54::i;:::-;13700:71;-1:-1:-1;13844:18:34;13901:30;13945:7;13966:16;:14;;;;:16::i;:::-;13996:17;:15;;;;:17::i;:::-;14027:13;:11;;;;:13::i;:::-;14054:6;14074:14;:12;;;;:14::i;:::-;14102:27;:19;:17;;;;:19::i;:::-;:25;;;:27::i;:::-;13865:274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13844:295;;14435:13;14454:5;:10;;14465:5;14454:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14434:37;;;14534:8;14529:183;;14597:16;14651:4;14648:1;;14630:26;14683:4;14648:1;14673:15;2391:122:80;2471:21;;:35;;;;;;;;2446:6;;2471:21;;;:33;;:35;;;;;;;;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2471:35:80;;-1:-1:-1;2391:122:80;:::o;999:129:75:-;1097:23;;;999:129::o;6215:531:33:-;6408:7;6446:293;6717:20;6501;6543:5;6570;6597:12;6631:7;6660:10;6446:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:263;;:293;;;;:::i;737:413:17:-;1097:20;1135:8;;;737:413::o;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;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;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;935:126:7;:::o;885:203:28:-;1012:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:27;1012:68;;;985:96;;1005:5;;985:19;:96::i;:::-;885:203;;;;:::o;7902:429:33:-;8040:7;8149:5;8143:19;8184:5;8217:7;8211:21;8254:7;8283:9;8105:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8105:205:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8078:246;;;;;;8059:265;;7902:429;;;;;:::o;7247:193::-;7346:7;7376:57;7418:13;7376:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;:57::i;9686:578:32:-;9764:7;9788:26;9795:7;9804:9;9788:6;:26::i;:::-;9783:451;;9833:9;9846:35;9864:15;9871:7;9864:6;:15::i;:::-;9856:24;;9846:9;:35::i;:::-;9830:51;;;9898:9;9911:29;9929:9;9921:18;;9911:9;:29::i;:::-;9998:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10212:11;;;;;;;;;;;;;;;;;;9895:45;;-1:-1:-1;9998:186:32;;-1:-1:-1;9998:186:32;;10212:11;;;;;;;;;;;9954:17;10212:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9783:451;-1:-1:-1;10250:7:32;;9686:578;-1:-1:-1;9686:578:32:o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:32:o;2433:203:79:-;2562:16;;;2521:15;2562:16;;;:7;:16;;;;;;2596:21;2588:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3703:379:33;3852:12;3810:8;3820:13;2754:28;3820:13;2771:10;;2754:28;;3888:22:::1;3902:7;3888:13;:22::i;:::-;3880:42;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3958:16;::::0;;3972:1:::1;3958:16:::0;;;;;::::1;::::0;;3932:23:::1;::::0;3958:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;3958:16:33::1;3932:42;;3996:8;3984:6;3991:1;3984:9;;;;;;;;;;;;;:20;;;;;;;;;;;::::0;::::1;4026:7;4014:6;4021:1;4014:9;;;;;;;;:19:::0;;;::::1;:9;::::0;;::::1;::::0;;;;;;;:19;4050:25:::1;4068:6:::0;4050:17:::1;:25::i;12397:443:32:-:0;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:32;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;13926:234:33:-;13989:7;14012:30;14033:8;14012:20;:30::i;:::-;14008:106;;;14065:38;:15;;;14088:13;14065:15;:38::i;:::-;14058:45;;;;14008:106;14130:23;:21;:23::i;8826:165:32:-;8887:7;8914:16;8922:7;8914;:16::i;:::-;8906:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8977:7:32;8826:165::o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;9523:131:33:-;9581:5;9611:35;:18;;;2120:2;9644:1;9611:18;:35::i;4562:191::-;4631:4;4695:5;4689:12;;;;;;;;4666:35;;:19;4677:7;4666:10;:19::i;:::-;:35;;;:80;;;;;4741:5;4717:29;;;;;;;;:20;4729:7;4717:11;:20::i;:::-;:29;;;;;;;;;;4562:191;-1:-1:-1;;;4562:191:33:o;10482:301::-;10628:7;10578:15;10595:14;2754:28;10595:14;2771:10;;2754:28;-1:-1:-1;10744:32:33::1;:28:::0;;::::1;10773:2;10744:28;:32::i;15331:1077:34:-:0;15772:13;;15502:14;;15772:13;;:30;15816:17;:15;;;;:17::i;:::-;15847:13;:11;;;;:13::i;:::-;15772:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15772:98:34;;-1:-1:-1;15908:15:34;15926:14;:12;;;;:14::i;:::-;16012:13;;:35;;;;;;:13;:35;;;;;;;;;15908:32;;-1:-1:-1;16012:13:34;;;:27;;:35;;;;;;;;;;;;;;;:13;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16012:35:34;16008:197;;;16063:39;16074:6;16082:7;16091:10;16063;:39::i;:::-;16008:197;;;16133:61;16143:6;16151:7;16160:10;16172:21;:19;;;;:21::i;:::-;16133:9;:61::i;:::-;16336:10;16249:152;;16316:6;16249:152;;16270:32;16286:7;16295:6;16270:15;:32::i;:::-;16249:152;;;16368:1;16384:7;16249:152;;;;;;;;;;;;;;;;;;;;;;;;;;15331:1077;;;;;;;;:::o;17954:692::-;1512:10;18025;:18;;;:32;:84;;;;;1512:10;18073:21;:36;;18025:84;18008:632;;;18592:37;;:24;;;;:37;;1512:10;;18592:37;;;;1512:10;18592:24;:37;;-1:-1:-1;;;;;17954:692:34;:::o;12041:216:33:-;12188:7;12132:15;12149:20;2754:28;12149:20;2771:10;;12418:320;12564:7;12508:15;12525:20;2754:28;12525:20;2771:10;;2754:28;-1:-1:-1;12702:29:33::1;:21:::0;;::::1;12724:2;12728;12702:21;:29::i;8784:214::-:0;8905:7;8863:8;8873:13;2754:28;8873:13;2771:10;;2754:28;-1:-1:-1;8970:21:33::1;:14:::0;;::::1;8985:1;8988:2;8970:14;:21::i;10925:191::-:0;10987:7;11076:33;:25;;;11102:2;11106;11076:25;:33::i;12909:426::-;13058:7;13002:15;13019:20;2754:28;13019:20;2771:10;;2754:28;-1:-1:-1;13150:178:33::1;2389:3;::::0;13228:21:::1;:19:::0;;::::1;;:21::i;:::-;:45;;;13298:15;13291:23;::::0;27680:614:32;27735:16;27763:11;27784:12;27799;27803:7;27799:3;:12::i;:::-;27784:27;;;;27929:4;27923:11;27916:18;;27984:3;27977:10;;28006:33;28019:7;28028:3;28034:4;28028:10;28006:12;:33::i;:::-;-1:-1:-1;28161:14:32;;;28177:4;28157:25;28151:4;28144:39;28224:17;;28058:230;;-1:-1:-1;28058:230:32:o;759:64:18:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;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:18;:::o;1067:192:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;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:11;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;2967:751:28:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:28;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:28;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9256:132:32;9330:4;9372:9;9353:28;;:15;9360:7;9353:6;:15::i;:::-;:28;;;;9256:132;-1:-1:-1;;;9256:132:32:o;13797:276::-;14016:3;14012:17;;13886:181::o;4809:556::-;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:32;;4904:202;;;-1:-1:-1;5169:2:32;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:32;;5154:205;;;;4809:556;;;:::o;19502:677::-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:32;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:32:o;2995:141:33:-;3058:4;3081:19;3092:7;3081:10;:19::i;:::-;:48;;;;3104:25;3121:7;3104:16;:25::i;30791:744:32:-;31012:4;31006:11;30855:16;;30883:11;31086:32;31097:8;31113:4;31107:10;;31086;:32::i;:::-;31067:51;;31128:16;31147:13;31151:8;31147:3;:13::i;:::-;31128:32;;;;31170:18;31191:19;31201:8;31191:9;:19::i;:::-;31348:21;;;-1:-1:-1;31468:20:32;;31490:4;31464:31;31458:4;31451:45;-1:-1:-1;31355:3:32;31230:299;-1:-1:-1;;31230:299:32:o;2553:172:31:-;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:32;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;3293:241:33:-;3361:4;;3392:11;:9;;;;:11::i;:::-;3377:26;;;-1:-1:-1;3440:27:33;3432:35;;;:95;;-1:-1:-1;3491:36:33;-1:-1:-1;3483:44:33;;3413:114;-1:-1:-1;;3293:241:33:o;10499:390:32:-;10858:3;10854:18;10792:25;;;;10842:31;;10642:241::o;7319:80::-;7388:4;7319:80;:::o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:32;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:32;;8456:129;-1:-1:-1;;;8456:129:32:o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;9792:121:33:-;9852:5;9882:23;:17;;;9852:5;9903:1;9882:17;:23::i;4222:118::-;4281:5;4317:14;:12;;;;:14::i;:::-;4305:28;;;;;;;;;21433:159:32;21511:7;21553:30;21563:7;21572:6;21580:2;21553:9;:30::i;16672:185:34:-;16802:48;:27;;;16830:10;16842:7;16802:27;:48::i;11268:240:33:-;11361:7;11472:29;:21;;;11494:2;11498;11472:21;:29::i;17153:416:34:-;17420:6;17407:25;;;17433:10;17445:7;17407:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:6;17513:35;;;17549:12;17513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19095:171;19227:32;;19247:2;19228:21;;;;;;19227:32;;19095:171::o;26400:910:32:-;26478:15;26513:16;26521:7;26513;:16::i;:::-;26505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:16;26600:7;26592;:16::i;:::-;26584:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26666:12;26681;26685:7;26681:3;:12::i;:::-;26666:27;;;;26703:15;26721:12;26725:7;26721:3;:12::i;:::-;26703:30;;;;26744:11;26873:4;26867:11;26860:18;;26960:7;26955:3;26952:16;26949:2;;;27000:4;26994;26987:18;26949:2;27215:4;27206:7;27200:4;27191:7;27188:1;27181:5;27170:50;27166:55;27251:52;27272:15;27279:7;27272:6;:15::i;:::-;27251:52;;27289:7;27298:4;27251:20;:52::i;3581:193:29:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;4286:199:32:-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:32:o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:32;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:32:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;28842:717::-;28930:18;29072:4;29066:11;29159:9;29154:3;29151:18;29148:2;;;29201:4;29195;29188:18;29148:2;;29264:15;29298:9;29293:194;29317:8;:15;29313:1;:19;29293:194;;;29354:15;29372:8;29381:1;29372:11;;;;;;;;;;;;;;29354:29;;29397:42;29410:7;29431;29419:9;:19;29397:12;:42::i;:::-;;29464:12;29468:7;29464:3;:12::i;:::-;29453:23;;;;;;;-1:-1:-1;29334:4:32;;29293:194;;;;29509:43;29530:1;29533:9;29544:7;29509:20;:43::i;15578:111::-;15637:7;15663:14;15669:7;15663:5;:14::i;:::-;15680:2;15663:19;;15578:111;-1:-1:-1;;15578:111:32:o;704:175:28:-;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;7750:103:32:-;7807:4;7831:15;7838:7;7831:6;:15::i;:::-;7830:16;;7750:103;-1:-1:-1;;7750:103:32:o;4608:523:29:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:29:o;3073:1041:32:-;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o;15237:122::-;15292:7;15350:2;15318:29;15344:2;15326:12;15330:7;15326:3;:12::i;:::-;15318:21;;;:25;:29::i;:::-;:34;;;;;;;15237:122;-1:-1:-1;;15237:122:32:o;7520:101::-;7610:4;7599:15;;;;;7520:101::o;7091:725:29:-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:29;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "DUST_AMOUNT()": "97f641ab",
    "VERSION()": "ffa1ad74",
    "enrollCustom(uint32,bytes32,address)": "28b1aea0",
    "enrollRemoteRouter(uint32,bytes32)": "b49c53a7",
    "handle(uint32,uint32,bytes32,bytes)": "ab2dc3f5",
    "initialize(address,address)": "485cc955",
    "liquidityProvider(bytes32)": "546d573d",
    "migrate(address)": "ce5494bb",
    "owner()": "8da5cb5b",
    "remotes(uint32)": "83bbb806",
    "renounceOwnership()": "715018a6",
    "send(address,uint256,uint32,bytes32,bool)": "a9bd1226",
    "sendToHook(address,uint256,uint32,bytes32,bytes)": "bc7dbab3",
    "setXAppConnectionManager(address)": "41bdc8b5",
    "tokenRegistry()": "9d23c4c7",
    "transferOwnership(address)": "f2fde38b",
    "xAppConnectionManager()": "3339df96"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/BridgeRouter.sol",
    "id": 31251,
    "exportedSymbols": {
      "BaseBridgeRouter": [
        31120
      ],
      "BridgeMessage": [
        30301
      ],
      "BridgeRouter": [
        31124
      ],
      "EthereumBridgeRouter": [
        31250
      ],
      "Home": [
        43790
      ],
      "IBridgeHook": [
        33543
      ],
      "IBridgeToken": [
        33609
      ],
      "IERC20": [
        27517
      ],
      "IEventAccountant": [
        33635
      ],
      "ITokenRegistry": [
        33703
      ],
      "Router": [
        46768
      ],
      "SafeERC20": [
        27730
      ],
      "TypeCasts": [
        46345
      ],
      "TypedMemView": [
        29602
      ],
      "Version0": [
        44622
      ],
      "XAppConnectionClient": [
        46866
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:21672:34",
    "nodes": [
      {
        "id": 30303,
        "nodeType": "PragmaDirective",
        "src": "46:22:34",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 30305,
        "nodeType": "ImportDirective",
        "src": "116:50:34",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "./BridgeMessage.sol",
        "scope": 31251,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30304,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:13:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30307,
        "nodeType": "ImportDirective",
        "src": "167:59:34",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/IBridgeToken.sol",
        "file": "./interfaces/IBridgeToken.sol",
        "scope": 31251,
        "sourceUnit": 33610,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30306,
              "name": "IBridgeToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "175:12:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30309,
        "nodeType": "ImportDirective",
        "src": "227:63:34",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/ITokenRegistry.sol",
        "file": "./interfaces/ITokenRegistry.sol",
        "scope": 31251,
        "sourceUnit": 33704,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30308,
              "name": "ITokenRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "235:14:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30311,
        "nodeType": "ImportDirective",
        "src": "291:57:34",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/IBridgeHook.sol",
        "file": "./interfaces/IBridgeHook.sol",
        "scope": 31251,
        "sourceUnit": 33544,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30310,
              "name": "IBridgeHook",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "299:11:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30313,
        "nodeType": "ImportDirective",
        "src": "349:67:34",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/IEventAccountant.sol",
        "file": "./interfaces/IEventAccountant.sol",
        "scope": 31251,
        "sourceUnit": 33636,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30312,
              "name": "IEventAccountant",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "357:16:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30315,
        "nodeType": "ImportDirective",
        "src": "463:100:34",
        "absolutePath": "packages/contracts-router/contracts/XAppConnectionClient.sol",
        "file": "@nomad-xyz/contracts-router/contracts/XAppConnectionClient.sol",
        "scope": 31251,
        "sourceUnit": 46867,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30314,
              "name": "XAppConnectionClient",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "471:20:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30317,
        "nodeType": "ImportDirective",
        "src": "564:72:34",
        "absolutePath": "packages/contracts-router/contracts/Router.sol",
        "file": "@nomad-xyz/contracts-router/contracts/Router.sol",
        "scope": 31251,
        "sourceUnit": 46769,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30316,
              "name": "Router",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "572:6:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30319,
        "nodeType": "ImportDirective",
        "src": "637:66:34",
        "absolutePath": "packages/contracts-core/contracts/Home.sol",
        "file": "@nomad-xyz/contracts-core/contracts/Home.sol",
        "scope": 31251,
        "sourceUnit": 43791,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30318,
              "name": "Home",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "645:4:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30321,
        "nodeType": "ImportDirective",
        "src": "704:81:34",
        "absolutePath": "packages/contracts-core/contracts/libs/TypeCasts.sol",
        "file": "@nomad-xyz/contracts-core/contracts/libs/TypeCasts.sol",
        "scope": 31251,
        "sourceUnit": 46346,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30320,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "712:9:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30323,
        "nodeType": "ImportDirective",
        "src": "786:74:34",
        "absolutePath": "packages/contracts-core/contracts/Version0.sol",
        "file": "@nomad-xyz/contracts-core/contracts/Version0.sol",
        "scope": 31251,
        "sourceUnit": 44623,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30322,
              "name": "Version0",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "794:8:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30325,
        "nodeType": "ImportDirective",
        "src": "861:78:34",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 31251,
        "sourceUnit": 29603,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30324,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "869:12:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30327,
        "nodeType": "ImportDirective",
        "src": "940:70:34",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 31251,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30326,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "948:6:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 30329,
        "nodeType": "ImportDirective",
        "src": "1011:76:34",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "scope": 31251,
        "sourceUnit": 27731,
        "symbolAliases": [
          {
            "foreign": {
              "id": 30328,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "1019:9:34",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31120,
        "nodeType": "ContractDefinition",
        "src": "1124:18431:34",
        "nodes": [
          {
            "id": 30337,
            "nodeType": "UsingForDirective",
            "src": "1229:29:34",
            "libraryName": {
              "id": 30335,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "1235:12:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 30336,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1252:5:34",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 30340,
            "nodeType": "UsingForDirective",
            "src": "1263:31:34",
            "libraryName": {
              "id": 30338,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "1269:12:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 30339,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "1286:7:34",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 30343,
            "nodeType": "UsingForDirective",
            "src": "1299:32:34",
            "libraryName": {
              "id": 30341,
              "name": "BridgeMessage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30301,
              "src": "1305:13:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeMessage_$30301",
                "typeString": "library BridgeMessage"
              }
            },
            "typeName": {
              "id": 30342,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "1323:7:34",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 30346,
            "nodeType": "UsingForDirective",
            "src": "1336:27:34",
            "libraryName": {
              "id": 30344,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27730,
              "src": "1342:9:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$27730",
                "typeString": "library SafeERC20"
              }
            },
            "typeName": {
              "id": 30345,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27517,
              "src": "1356:6:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$27517",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 30349,
            "nodeType": "VariableDeclaration",
            "src": "1474:48:34",
            "constant": true,
            "functionSelector": "97f641ab",
            "mutability": "constant",
            "name": "DUST_AMOUNT",
            "scope": 31120,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 30347,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1474:7:34",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "302e3036",
              "id": 30348,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1512:10:34",
              "subdenomination": "ether",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_60000000000000000_by_1",
                "typeString": "int_const 60000000000000000"
              },
              "value": "0.06"
            },
            "visibility": "public"
          },
          {
            "id": 30351,
            "nodeType": "VariableDeclaration",
            "src": "1638:35:34",
            "constant": false,
            "functionSelector": "9d23c4c7",
            "mutability": "mutable",
            "name": "tokenRegistry",
            "scope": 31120,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
              "typeString": "contract ITokenRegistry"
            },
            "typeName": {
              "id": 30350,
              "name": "ITokenRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33703,
              "src": "1638:14:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                "typeString": "contract ITokenRegistry"
              }
            },
            "visibility": "public"
          },
          {
            "id": 30355,
            "nodeType": "VariableDeclaration",
            "src": "1838:52:34",
            "constant": false,
            "functionSelector": "546d573d",
            "mutability": "mutable",
            "name": "liquidityProvider",
            "scope": 31120,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 30354,
              "keyType": {
                "id": 30352,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "1846:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "1838:27:34",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 30353,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1857:7:34",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 30359,
            "nodeType": "VariableDeclaration",
            "src": "1973:25:34",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 31120,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 30356,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1973:7:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 30358,
              "length": {
                "hexValue": "3439",
                "id": 30357,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1981:2:34",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "1973:11:34",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 30374,
            "nodeType": "EventDefinition",
            "src": "2523:178:34",
            "anonymous": false,
            "documentation": {
              "id": 30360,
              "nodeType": "StructuredDocumentation",
              "src": "2039:479:34",
              "text": " @notice emitted when tokens are sent from this domain to another domain\n @param token the address of the token contract\n @param from the address sending tokens\n @param toDomain the domain of the chain the tokens are being sent to\n @param toId the bytes32 address of the recipient of the tokens\n @param amount the amount of tokens sent\n @param toHook True if sent to a hook, on the remote chain, false\n        otherwise"
            },
            "name": "Send",
            "parameters": {
              "id": 30373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30362,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 30374,
                  "src": "2543:21:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30361,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2543:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30364,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 30374,
                  "src": "2574:20:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2574:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30366,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "toDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 30374,
                  "src": "2604:23:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30365,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2604:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30368,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "toId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30374,
                  "src": "2637:12:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30367,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2637:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30370,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 30374,
                  "src": "2659:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 30369,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2659:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30372,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "toHook",
                  "nodeType": "VariableDeclaration",
                  "scope": 30374,
                  "src": "2683:11:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 30371,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2683:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2533:167:34"
            }
          },
          {
            "id": 30387,
            "nodeType": "EventDefinition",
            "src": "3336:184:34",
            "anonymous": false,
            "documentation": {
              "id": 30375,
              "nodeType": "StructuredDocumentation",
              "src": "2707:624:34",
              "text": " @notice emitted when tokens are dispensed to an account on this domain\n @param originAndNonce Domain where the transfer originated and the\n        unique identifier for the message from origin to destination,\n        combined in a single field ((origin << 32) & nonce)\n @param token The address of the local token contract being received\n @param recipient The address receiving the tokens; the original\n        recipient of the transfer\n @param liquidityProvider DEPRECATED; The account providing liquidity\n @param amount The amount of tokens being received"
            },
            "name": "Receive",
            "parameters": {
              "id": 30386,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30377,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "originAndNonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 30387,
                  "src": "3359:29:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 30376,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3359:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30379,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 30387,
                  "src": "3398:21:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30378,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3398:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30381,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 30387,
                  "src": "3429:25:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30380,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3429:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30383,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "liquidityProvider",
                  "nodeType": "VariableDeclaration",
                  "scope": 30387,
                  "src": "3464:25:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30382,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3464:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30385,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 30387,
                  "src": "3499:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 30384,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3499:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3349:170:34"
            }
          },
          {
            "id": 30391,
            "nodeType": "FunctionDefinition",
            "src": "3558:29:34",
            "body": {
              "id": 30390,
              "nodeType": "Block",
              "src": "3585:2:34",
              "statements": []
            },
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "parameters": {
              "id": 30388,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3565:2:34"
            },
            "returnParameters": {
              "id": 30389,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3585:0:34"
            },
            "scope": 31120,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 30411,
            "nodeType": "FunctionDefinition",
            "src": "3631:245:34",
            "body": {
              "id": 30410,
              "nodeType": "Block",
              "src": "3746:130:34",
              "statements": [
                {
                  "expression": {
                    "id": 30404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 30400,
                      "name": "tokenRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30351,
                      "src": "3756:13:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                        "typeString": "contract ITokenRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 30402,
                          "name": "_tokenRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30393,
                          "src": "3787:14:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 30401,
                        "name": "ITokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33703,
                        "src": "3772:14:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ITokenRegistry_$33703_$",
                          "typeString": "type(contract ITokenRegistry)"
                        }
                      },
                      "id": 30403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3772:30:34",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                        "typeString": "contract ITokenRegistry"
                      }
                    },
                    "src": "3756:46:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                      "typeString": "contract ITokenRegistry"
                    }
                  },
                  "id": 30405,
                  "nodeType": "ExpressionStatement",
                  "src": "3756:46:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30407,
                        "name": "_xAppConnectionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30395,
                        "src": "3846:22:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 30406,
                      "name": "__XAppConnectionClient_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46814,
                      "src": "3812:33:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 30408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3812:57:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30409,
                  "nodeType": "ExpressionStatement",
                  "src": "3812:57:34"
                }
              ]
            },
            "functionSelector": "485cc955",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 30398,
                "modifierName": {
                  "id": 30397,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "3730:11:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3730:11:34"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 30396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30393,
                  "mutability": "mutable",
                  "name": "_tokenRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 30411,
                  "src": "3651:22:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30392,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3651:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30395,
                  "mutability": "mutable",
                  "name": "_xAppConnectionManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 30411,
                  "src": "3675:30:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30394,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3675:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3650:56:34"
            },
            "returnParameters": {
              "id": 30399,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3746:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 30482,
            "nodeType": "FunctionDefinition",
            "src": "4201:734:34",
            "body": {
              "id": 30481,
              "nodeType": "Block",
              "src": "4391:544:34",
              "statements": [
                {
                  "assignments": [
                    30431
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30431,
                      "mutability": "mutable",
                      "name": "_msg",
                      "nodeType": "VariableDeclaration",
                      "scope": 30481,
                      "src": "4450:12:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30430,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "4450:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30438,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 30434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4478:1:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "expression": {
                            "id": 30432,
                            "name": "_message",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30420,
                            "src": "4465:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 30433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "ref",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28766,
                          "src": "4465:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                          }
                        },
                        "id": 30435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4465:15:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30436,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustBeMessage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30300,
                      "src": "4465:29:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes29)"
                      }
                    },
                    "id": 30437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4465:31:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4450:46:34"
                },
                {
                  "assignments": [
                    30440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30440,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 30481,
                      "src": "4506:16:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30439,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "4506:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30444,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30441,
                        "name": "_msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30431,
                        "src": "4525:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokenId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30152,
                      "src": "4525:12:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes29)"
                      }
                    },
                    "id": 30443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4525:14:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4506:33:34"
                },
                {
                  "assignments": [
                    30446
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30446,
                      "mutability": "mutable",
                      "name": "_action",
                      "nodeType": "VariableDeclaration",
                      "scope": 30481,
                      "src": "4549:15:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30445,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "4549:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30450,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30447,
                        "name": "_msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30431,
                        "src": "4567:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "action",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30258,
                      "src": "4567:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes29)"
                      }
                    },
                    "id": 30449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4567:13:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4549:31:34"
                },
                {
                  "condition": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30451,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30446,
                        "src": "4649:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30452,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29809,
                      "src": "4649:18:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bool)"
                      }
                    },
                    "id": 30453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4649:20:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 30462,
                          "name": "_action",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30446,
                          "src": "4757:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes29",
                            "typeString": "bytes29"
                          }
                        },
                        "id": 30463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isTransferToHook",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 29824,
                        "src": "4757:24:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bool_$bound_to$_t_bytes29_$",
                          "typeString": "function (bytes29) pure returns (bool)"
                        }
                      },
                      "id": 30464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4757:26:34",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 30478,
                      "nodeType": "Block",
                      "src": "4873:56:34",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "hexValue": "66616c7365",
                                "id": 30474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4895:5:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "2176616c696420616374696f6e",
                                "id": 30475,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4902:15:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_ea7f0865b907d858ed23abe8efcde730894a1561e37eb14d73dffa15b8573a4d",
                                  "typeString": "literal_string \"!valid action\""
                                },
                                "value": "!valid action"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ea7f0865b907d858ed23abe8efcde730894a1561e37eb14d73dffa15b8573a4d",
                                  "typeString": "literal_string \"!valid action\""
                                }
                              ],
                              "id": 30473,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "src": "4887:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (bool,string memory) pure"
                              }
                            },
                            "id": 30476,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4887:31:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 30477,
                          "nodeType": "ExpressionStatement",
                          "src": "4887:31:34"
                        }
                      ]
                    },
                    "id": 30479,
                    "nodeType": "IfStatement",
                    "src": "4753:176:34",
                    "trueBody": {
                      "id": 30472,
                      "nodeType": "Block",
                      "src": "4785:82:34",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 30466,
                                "name": "_origin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30414,
                                "src": "4821:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "id": 30467,
                                "name": "_nonce",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30416,
                                "src": "4830:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "id": 30468,
                                "name": "_tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30440,
                                "src": "4838:8:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              {
                                "id": 30469,
                                "name": "_action",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30446,
                                "src": "4848:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                },
                                {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              ],
                              "id": 30465,
                              "name": "_handleTransferToHook",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30943,
                              "src": "4799:21:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                                "typeString": "function (uint32,uint32,bytes29,bytes29)"
                              }
                            },
                            "id": 30470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4799:57:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 30471,
                          "nodeType": "ExpressionStatement",
                          "src": "4799:57:34"
                        }
                      ]
                    }
                  },
                  "id": 30480,
                  "nodeType": "IfStatement",
                  "src": "4645:284:34",
                  "trueBody": {
                    "id": 30461,
                    "nodeType": "Block",
                    "src": "4671:76:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 30455,
                              "name": "_origin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30414,
                              "src": "4701:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 30456,
                              "name": "_nonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30416,
                              "src": "4710:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 30457,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30440,
                              "src": "4718:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            {
                              "id": 30458,
                              "name": "_action",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30446,
                              "src": "4728:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              },
                              {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            ],
                            "id": 30454,
                            "name": "_handleTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30874,
                            "src": "4685:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                              "typeString": "function (uint32,uint32,bytes29,bytes29)"
                            }
                          },
                          "id": 30459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4685:51:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 30460,
                        "nodeType": "ExpressionStatement",
                        "src": "4685:51:34"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              46718
            ],
            "documentation": {
              "id": 30412,
              "nodeType": "StructuredDocumentation",
              "src": "3926:270:34",
              "text": " @notice Handles an incoming message\n @param _origin The origin domain\n @param _nonce The unique identifier for the message from origin to\n        destination\n @param _sender The sender address\n @param _message The message"
            },
            "functionSelector": "ab2dc3f5",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 30424,
                "modifierName": {
                  "id": 30423,
                  "name": "onlyReplica",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 46797,
                  "src": "4344:11:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4344:11:34"
              },
              {
                "arguments": [
                  {
                    "id": 30426,
                    "name": "_origin",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30414,
                    "src": "4373:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  {
                    "id": 30427,
                    "name": "_sender",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 30418,
                    "src": "4382:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 30428,
                "modifierName": {
                  "id": 30425,
                  "name": "onlyRemoteRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 46677,
                  "src": "4356:16:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint32_$_t_bytes32_$",
                    "typeString": "modifier (uint32,bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4356:34:34"
              }
            ],
            "name": "handle",
            "overrides": {
              "id": 30422,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4335:8:34"
            },
            "parameters": {
              "id": 30421,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30414,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 30482,
                  "src": "4226:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30413,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4226:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30416,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 30482,
                  "src": "4250:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30415,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4250:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30418,
                  "mutability": "mutable",
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 30482,
                  "src": "4273:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30417,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4273:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30420,
                  "mutability": "mutable",
                  "name": "_message",
                  "nodeType": "VariableDeclaration",
                  "scope": 30482,
                  "src": "4298:21:34",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 30419,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4298:5:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4216:109:34"
            },
            "returnParameters": {
              "id": 30429,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4391:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 30550,
            "nodeType": "FunctionDefinition",
            "src": "5240:977:34",
            "body": {
              "id": 30549,
              "nodeType": "Block",
              "src": "5468:749:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 30502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 30497,
                          "name": "_recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30491,
                          "src": "5513:10:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 30500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5535:1:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 30499,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5527:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 30498,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "5527:7:34",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 30501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5527:10:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "5513:24:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217265636970",
                        "id": 30503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5539:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2e0c3249efa7ab9076bbebcf16dbdd7f0a3f271725c707b05bd754b2ca237ca",
                          "typeString": "literal_string \"!recip\""
                        },
                        "value": "!recip"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2e0c3249efa7ab9076bbebcf16dbdd7f0a3f271725c707b05bd754b2ca237ca",
                          "typeString": "literal_string \"!recip\""
                        }
                      ],
                      "id": 30496,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5505:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 30504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5505:43:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30505,
                  "nodeType": "ExpressionStatement",
                  "src": "5505:43:34"
                },
                {
                  "assignments": [
                    30507,
                    30509
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30507,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 30549,
                      "src": "5599:16:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30506,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "5599:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 30509,
                      "mutability": "mutable",
                      "name": "_detailsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 30549,
                      "src": "5617:20:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 30508,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5617:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30514,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30511,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30485,
                        "src": "5653:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 30512,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30487,
                        "src": "5661:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 30510,
                      "name": "_takeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30811,
                      "src": "5641:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) returns (bytes29,bytes32)"
                      }
                    },
                    "id": 30513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5641:28:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5598:71:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 30520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 30516,
                          "name": "_destination",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30489,
                          "src": "5700:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 30517,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30507,
                              "src": "5716:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 30518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "domain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29983,
                            "src": "5716:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (uint32)"
                            }
                          },
                          "id": 30519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5716:17:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "5700:33:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e64732074656d706f726172696c792064697361626c6564",
                        "id": 30521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5747:28:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        },
                        "value": "sends temporarily disabled"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        }
                      ],
                      "id": 30515,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5679:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 30522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5679:106:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30523,
                  "nodeType": "ExpressionStatement",
                  "src": "5679:106:34"
                },
                {
                  "assignments": [
                    30525
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30525,
                      "mutability": "mutable",
                      "name": "_action",
                      "nodeType": "VariableDeclaration",
                      "scope": 30549,
                      "src": "5830:15:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30524,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "5830:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30532,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30528,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30491,
                        "src": "5890:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30529,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30487,
                        "src": "5914:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 30530,
                        "name": "_detailsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30509,
                        "src": "5935:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 30526,
                        "name": "BridgeMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30301,
                        "src": "5848:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                          "typeString": "type(library BridgeMessage)"
                        }
                      },
                      "id": 30527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29853,
                      "src": "5848:28:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$_t_bytes29_$",
                        "typeString": "function (bytes32,uint256,bytes32) pure returns (bytes29)"
                      }
                    },
                    "id": 30531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5848:109:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5830:127:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30534,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30489,
                        "src": "6047:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30535,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30507,
                        "src": "6061:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 30536,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30525,
                        "src": "6071:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 30533,
                      "name": "_sendTransferMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30843,
                      "src": "6026:20:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 30537,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6026:53:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30538,
                  "nodeType": "ExpressionStatement",
                  "src": "6026:53:34"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 30540,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30485,
                        "src": "6149:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 30541,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "6157:3:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 30542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "6157:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 30543,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30489,
                        "src": "6169:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30544,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30491,
                        "src": "6183:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30545,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30487,
                        "src": "6195:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 30546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6204:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 30539,
                      "name": "Send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30374,
                      "src": "6144:4:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint32_$_t_bytes32_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint32,bytes32,uint256,bool)"
                      }
                    },
                    "id": 30547,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6144:66:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30548,
                  "nodeType": "EmitStatement",
                  "src": "6139:71:34"
                }
              ]
            },
            "documentation": {
              "id": 30483,
              "nodeType": "StructuredDocumentation",
              "src": "4989:246:34",
              "text": " @notice Send tokens to a recipient on a remote chain\n @param _token The token address\n @param _amount The token amount\n @param _destination The destination domain\n @param _recipient The recipient address"
            },
            "functionSelector": "a9bd1226",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "send",
            "parameters": {
              "id": 30494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30485,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 30550,
                  "src": "5263:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30484,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5263:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30487,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 30550,
                  "src": "5287:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 30486,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5287:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30489,
                  "mutability": "mutable",
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 30550,
                  "src": "5312:19:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30488,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5312:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30491,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 30550,
                  "src": "5341:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30490,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5341:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30493,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 30550,
                  "src": "5369:4:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 30492,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5369:4:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5253:205:34"
            },
            "returnParameters": {
              "id": 30495,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5468:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 30624,
            "nodeType": "FunctionDefinition",
            "src": "6584:987:34",
            "body": {
              "id": 30623,
              "nodeType": "Block",
              "src": "6761:810:34",
              "statements": [
                {
                  "assignments": [
                    30565,
                    30567
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30565,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 30623,
                      "src": "6812:16:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30564,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "6812:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 30567,
                      "mutability": "mutable",
                      "name": "_detailsHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 30623,
                      "src": "6830:20:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 30566,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6830:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30572,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30569,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30553,
                        "src": "6866:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 30570,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30555,
                        "src": "6874:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 30568,
                      "name": "_takeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30811,
                      "src": "6854:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) returns (bytes29,bytes32)"
                      }
                    },
                    "id": 30571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6854:28:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6811:71:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 30579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 30574,
                          "name": "_remoteHook",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30559,
                          "src": "6900:11:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 30577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6923:1:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 30576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6915:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 30575,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6915:7:34",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 30578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6915:10:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "6900:25:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21686f6f6b",
                        "id": 30580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6927:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_880b346687e0121adfe144f0410c28aa1984c794a5d7f7df34cabf0eec678f87",
                          "typeString": "literal_string \"!hook\""
                        },
                        "value": "!hook"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_880b346687e0121adfe144f0410c28aa1984c794a5d7f7df34cabf0eec678f87",
                          "typeString": "literal_string \"!hook\""
                        }
                      ],
                      "id": 30573,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6892:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 30581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6892:43:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30582,
                  "nodeType": "ExpressionStatement",
                  "src": "6892:43:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 30588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 30584,
                          "name": "_destination",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30557,
                          "src": "6966:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 30585,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30565,
                              "src": "6982:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 30586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "domain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29983,
                            "src": "6982:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (uint32)"
                            }
                          },
                          "id": 30587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6982:17:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "6966:33:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "73656e64732074656d706f726172696c792064697361626c6564",
                        "id": 30589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7013:28:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        },
                        "value": "sends temporarily disabled"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a9cdb9b4b51f8d476cf90b8e6bb2de4c011f73f712f409a6e78be9a6627e511b",
                          "typeString": "literal_string \"sends temporarily disabled\""
                        }
                      ],
                      "id": 30583,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6945:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 30590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6945:106:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30591,
                  "nodeType": "ExpressionStatement",
                  "src": "6945:106:34"
                },
                {
                  "assignments": [
                    30593
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30593,
                      "mutability": "mutable",
                      "name": "_action",
                      "nodeType": "VariableDeclaration",
                      "scope": 30623,
                      "src": "7101:15:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 30592,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "7101:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30606,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30596,
                        "name": "_remoteHook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30559,
                        "src": "7167:11:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30597,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30555,
                        "src": "7192:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 30598,
                        "name": "_detailsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30567,
                        "src": "7213:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 30601,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "7266:3:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 30602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "7266:10:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "id": 30599,
                            "name": "TypeCasts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 46345,
                            "src": "7239:9:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                              "typeString": "type(library TypeCasts)"
                            }
                          },
                          "id": 30600,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "addressToBytes32",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 46325,
                          "src": "7239:26:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                            "typeString": "function (address) pure returns (bytes32)"
                          }
                        },
                        "id": 30603,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7239:38:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30604,
                        "name": "_extraData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30561,
                        "src": "7291:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "id": 30594,
                        "name": "BridgeMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30301,
                        "src": "7119:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                          "typeString": "type(library BridgeMessage)"
                        }
                      },
                      "id": 30595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatTransferToHook",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29888,
                      "src": "7119:34:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes29_$",
                        "typeString": "function (bytes32,uint256,bytes32,bytes32,bytes memory) pure returns (bytes29)"
                      }
                    },
                    "id": 30605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7119:192:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7101:210:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30608,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30557,
                        "src": "7401:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30609,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30565,
                        "src": "7415:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 30610,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30593,
                        "src": "7425:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 30607,
                      "name": "_sendTransferMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30843,
                      "src": "7380:20:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 30611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7380:53:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30612,
                  "nodeType": "ExpressionStatement",
                  "src": "7380:53:34"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 30614,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30553,
                        "src": "7503:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 30615,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7511:3:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 30616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "7511:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 30617,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30557,
                        "src": "7523:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30618,
                        "name": "_remoteHook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30559,
                        "src": "7537:11:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30619,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30555,
                        "src": "7550:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 30620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7559:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 30613,
                      "name": "Send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30374,
                      "src": "7498:4:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint32_$_t_bytes32_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint32,bytes32,uint256,bool)"
                      }
                    },
                    "id": 30621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7498:66:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30622,
                  "nodeType": "EmitStatement",
                  "src": "7493:71:34"
                }
              ]
            },
            "documentation": {
              "id": 30551,
              "nodeType": "StructuredDocumentation",
              "src": "6223:356:34",
              "text": " @notice Send tokens to a hook on the remote chain\n @param _token The token address\n @param _amount The token amount\n @param _destination The destination domain\n @param _remoteHook The hook contract on the remote chain\n @param _extraData Extra data that will be passed to the hook for\n        execution"
            },
            "functionSelector": "bc7dbab3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sendToHook",
            "parameters": {
              "id": 30562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30553,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 30624,
                  "src": "6613:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30552,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6613:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30555,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 30624,
                  "src": "6637:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 30554,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6637:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30557,
                  "mutability": "mutable",
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 30624,
                  "src": "6662:19:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30556,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6662:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30559,
                  "mutability": "mutable",
                  "name": "_remoteHook",
                  "nodeType": "VariableDeclaration",
                  "scope": 30624,
                  "src": "6691:19:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30558,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6691:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30561,
                  "mutability": "mutable",
                  "name": "_extraData",
                  "nodeType": "VariableDeclaration",
                  "scope": 30624,
                  "src": "6720:25:34",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 30560,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6720:5:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6603:148:34"
            },
            "returnParameters": {
              "id": 30563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6761:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 30667,
            "nodeType": "FunctionDefinition",
            "src": "7988:409:34",
            "body": {
              "id": 30666,
              "nodeType": "Block",
              "src": "8105:292:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 30642,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "8268:4:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                              "typeString": "contract BaseBridgeRouter"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                              "typeString": "contract BaseBridgeRouter"
                            }
                          ],
                          "id": 30641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8260:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 30640,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8260:7:34",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 30643,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8260:13:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 30644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8275:1:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 30637,
                            "name": "_custom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30631,
                            "src": "8246:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 30636,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "8233:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 30638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8233:21:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 30639,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33589,
                      "src": "8233:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 30645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8233:44:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30646,
                  "nodeType": "ExpressionStatement",
                  "src": "8233:44:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 30653,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "8322:4:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                              "typeString": "contract BaseBridgeRouter"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                              "typeString": "contract BaseBridgeRouter"
                            }
                          ],
                          "id": 30652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8314:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 30651,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8314:7:34",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 30654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8314:13:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 30655,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8329:1:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 30648,
                            "name": "_custom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30631,
                            "src": "8300:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 30647,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "8287:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 30649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8287:21:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 30650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33582,
                      "src": "8287:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 30656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8287:44:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30657,
                  "nodeType": "ExpressionStatement",
                  "src": "8287:44:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30661,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30627,
                        "src": "8368:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30662,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30629,
                        "src": "8377:3:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30663,
                        "name": "_custom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30631,
                        "src": "8382:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 30658,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30351,
                        "src": "8341:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                          "typeString": "contract ITokenRegistry"
                        }
                      },
                      "id": 30660,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollCustom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33695,
                      "src": "8341:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,bytes32,address) external"
                      }
                    },
                    "id": 30664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8341:49:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30665,
                  "nodeType": "ExpressionStatement",
                  "src": "8341:49:34"
                }
              ]
            },
            "documentation": {
              "id": 30625,
              "nodeType": "StructuredDocumentation",
              "src": "7628:355:34",
              "text": " @notice Enroll a custom token. This allows projects to work with\n         governance to specify a custom representation.\n @param _domain the domain of the canonical Token to enroll\n @param _id the bytes32 ID of the canonical of the Token to enroll\n @param _custom the address of the custom implementation to use."
            },
            "functionSelector": "28b1aea0",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 30634,
                "modifierName": {
                  "id": 30633,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8095:9:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8095:9:34"
              }
            ],
            "name": "enrollCustom",
            "parameters": {
              "id": 30632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30627,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 30667,
                  "src": "8019:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30626,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8019:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30629,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 30667,
                  "src": "8043:11:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30628,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8043:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30631,
                  "mutability": "mutable",
                  "name": "_custom",
                  "nodeType": "VariableDeclaration",
                  "scope": 30667,
                  "src": "8064:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30630,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8064:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8009:76:34"
            },
            "returnParameters": {
              "id": 30635,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8105:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 30719,
            "nodeType": "FunctionDefinition",
            "src": "8830:452:34",
            "body": {
              "id": 30718,
              "nodeType": "Block",
              "src": "8874:408:34",
              "statements": [
                {
                  "assignments": [
                    30674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30674,
                      "mutability": "mutable",
                      "name": "_currentRepr",
                      "nodeType": "VariableDeclaration",
                      "scope": 30718,
                      "src": "8884:20:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 30673,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8884:7:34",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30679,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30677,
                        "name": "_oldRepr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30670,
                        "src": "8942:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 30675,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30351,
                        "src": "8907:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                          "typeString": "contract ITokenRegistry"
                        }
                      },
                      "id": 30676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "oldReprToCurrentRepr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33702,
                      "src": "8907:34:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_address_$",
                        "typeString": "function (address) view external returns (address)"
                      }
                    },
                    "id": 30678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8907:44:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8884:67:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 30683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 30681,
                          "name": "_currentRepr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30674,
                          "src": "8969:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 30682,
                          "name": "_oldRepr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30670,
                          "src": "8985:8:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "8969:24:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21646966666572656e74",
                        "id": 30684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8995:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_07d635fa153385697a692b37ba850cebc27e2908c420ef0ade8900e4bffa96c4",
                          "typeString": "literal_string \"!different\""
                        },
                        "value": "!different"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_07d635fa153385697a692b37ba850cebc27e2908c420ef0ade8900e4bffa96c4",
                          "typeString": "literal_string \"!different\""
                        }
                      ],
                      "id": 30680,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8961:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 30685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8961:47:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30686,
                  "nodeType": "ExpressionStatement",
                  "src": "8961:47:34"
                },
                {
                  "assignments": [
                    30688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30688,
                      "mutability": "mutable",
                      "name": "_old",
                      "nodeType": "VariableDeclaration",
                      "scope": 30718,
                      "src": "9086:17:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                        "typeString": "contract IBridgeToken"
                      },
                      "typeName": {
                        "id": 30687,
                        "name": "IBridgeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 33609,
                        "src": "9086:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30692,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30690,
                        "name": "_oldRepr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30670,
                        "src": "9119:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 30689,
                      "name": "IBridgeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33609,
                      "src": "9106:12:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                        "typeString": "type(contract IBridgeToken)"
                      }
                    },
                    "id": 30691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9106:22:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                      "typeString": "contract IBridgeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9086:42:34"
                },
                {
                  "assignments": [
                    30694
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30694,
                      "mutability": "mutable",
                      "name": "_bal",
                      "nodeType": "VariableDeclaration",
                      "scope": 30718,
                      "src": "9138:12:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 30693,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9138:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30700,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 30697,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "9168:3:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 30698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "9168:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 30695,
                        "name": "_old",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30688,
                        "src": "9153:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 30696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33560,
                      "src": "9153:14:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 30699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9153:26:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9138:41:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 30704,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "9199:3:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 30705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "9199:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 30706,
                        "name": "_bal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30694,
                        "src": "9211:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 30701,
                        "name": "_old",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30688,
                        "src": "9189:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 30703,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33582,
                      "src": "9189:9:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 30707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9189:27:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30708,
                  "nodeType": "ExpressionStatement",
                  "src": "9189:27:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 30713,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "9258:3:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 30714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "9258:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 30715,
                        "name": "_bal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30694,
                        "src": "9270:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 30710,
                            "name": "_currentRepr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30674,
                            "src": "9239:12:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 30709,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "9226:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 30711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9226:26:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 30712,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33589,
                      "src": "9226:31:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 30716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9226:49:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30717,
                  "nodeType": "ExpressionStatement",
                  "src": "9226:49:34"
                }
              ]
            },
            "documentation": {
              "id": 30668,
              "nodeType": "StructuredDocumentation",
              "src": "8403:422:34",
              "text": " @notice Migrate all tokens in a previous representation to the latest\n         custom representation. This works by looking up local mappings\n         and then burning old tokens and minting new tokens.\n @dev This is explicitly opt-in to allow dapps to decide when and how to\n      upgrade to the new representation.\n @param _oldRepr The address of the old token to migrate"
            },
            "functionSelector": "ce5494bb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "migrate",
            "parameters": {
              "id": 30671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30670,
                  "mutability": "mutable",
                  "name": "_oldRepr",
                  "nodeType": "VariableDeclaration",
                  "scope": 30719,
                  "src": "8847:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30669,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8847:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8846:18:34"
            },
            "returnParameters": {
              "id": 30672,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8874:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 30811,
            "nodeType": "FunctionDefinition",
            "src": "9813:1239:34",
            "body": {
              "id": 30810,
              "nodeType": "Block",
              "src": "9945:1107:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 30734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 30732,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30724,
                          "src": "10005:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 30733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10015:1:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "10005:11:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21616d6e74",
                        "id": 30735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10018:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_68b2b497b71cd104f16a8d4f119b234b325c9481ae87c628408fd4cd4c964eac",
                          "typeString": "literal_string \"!amnt\""
                        },
                        "value": "!amnt"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_68b2b497b71cd104f16a8d4f119b234b325c9481ae87c628408fd4cd4c964eac",
                          "typeString": "literal_string \"!amnt\""
                        }
                      ],
                      "id": 30731,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9997:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 30736,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9997:29:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30737,
                  "nodeType": "ExpressionStatement",
                  "src": "9997:29:34"
                },
                {
                  "assignments": [
                    30739
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30739,
                      "mutability": "mutable",
                      "name": "_t",
                      "nodeType": "VariableDeclaration",
                      "scope": 30810,
                      "src": "10083:15:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                        "typeString": "contract IBridgeToken"
                      },
                      "typeName": {
                        "id": 30738,
                        "name": "IBridgeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 33609,
                        "src": "10083:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30743,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30741,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30722,
                        "src": "10114:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 30740,
                      "name": "IBridgeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 33609,
                      "src": "10101:12:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                        "typeString": "type(contract IBridgeToken)"
                      }
                    },
                    "id": 30742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10101:20:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                      "typeString": "contract IBridgeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10083:38:34"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 30746,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30722,
                        "src": "10219:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 30744,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30351,
                        "src": "10191:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                          "typeString": "contract ITokenRegistry"
                        }
                      },
                      "id": 30745,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isLocalOrigin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33650,
                      "src": "10191:27:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 30747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10191:35:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 30791,
                    "nodeType": "Block",
                    "src": "10667:216:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 30780,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "10807:3:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 30781,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "10807:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 30782,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30724,
                              "src": "10819:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 30777,
                              "name": "_t",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30739,
                              "src": "10799:2:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                                "typeString": "contract IBridgeToken"
                              }
                            },
                            "id": 30779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 33582,
                            "src": "10799:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 30783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10799:28:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 30784,
                        "nodeType": "ExpressionStatement",
                        "src": "10799:28:34"
                      },
                      {
                        "expression": {
                          "id": 30789,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 30785,
                            "name": "_detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30729,
                            "src": "10841:12:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 30786,
                                "name": "_t",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30739,
                                "src": "10856:2:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                                  "typeString": "contract IBridgeToken"
                                }
                              },
                              "id": 30787,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "detailsHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 33575,
                              "src": "10856:14:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view external returns (bytes32)"
                              }
                            },
                            "id": 30788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10856:16:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "10841:31:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 30790,
                        "nodeType": "ExpressionStatement",
                        "src": "10841:31:34"
                      }
                    ]
                  },
                  "id": 30792,
                  "nodeType": "IfStatement",
                  "src": "10187:696:34",
                  "trueBody": {
                    "id": 30776,
                    "nodeType": "Block",
                    "src": "10228:433:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 30752,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "10383:3:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 30753,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "10383:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 30756,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "10403:4:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                                    "typeString": "contract BaseBridgeRouter"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                                    "typeString": "contract BaseBridgeRouter"
                                  }
                                ],
                                "id": 30755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10395:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 30754,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10395:7:34",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 30757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10395:13:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 30758,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30724,
                              "src": "10410:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 30749,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30722,
                                  "src": "10358:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 30748,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27517,
                                "src": "10351:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 30750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10351:14:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 30751,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27576,
                            "src": "10351:31:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 30759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10351:67:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 30760,
                        "nodeType": "ExpressionStatement",
                        "src": "10351:67:34"
                      },
                      {
                        "expression": {
                          "id": 30774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 30761,
                            "name": "_detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30729,
                            "src": "10506:12:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 30764,
                                    "name": "_t",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 30739,
                                    "src": "10567:2:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                                      "typeString": "contract IBridgeToken"
                                    }
                                  },
                                  "id": 30765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "name",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 33553,
                                  "src": "10567:7:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_string_memory_ptr_$",
                                    "typeString": "function () external returns (string memory)"
                                  }
                                },
                                "id": 30766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10567:9:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 30767,
                                    "name": "_t",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 30739,
                                    "src": "10594:2:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                                      "typeString": "contract IBridgeToken"
                                    }
                                  },
                                  "id": 30768,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "symbol",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 33565,
                                  "src": "10594:9:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_string_memory_ptr_$",
                                    "typeString": "function () view external returns (string memory)"
                                  }
                                },
                                "id": 30769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10594:11:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 30770,
                                    "name": "_t",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 30739,
                                    "src": "10623:2:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                                      "typeString": "contract IBridgeToken"
                                    }
                                  },
                                  "id": 30771,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "decimals",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 33570,
                                  "src": "10623:11:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                    "typeString": "function () view external returns (uint8)"
                                  }
                                },
                                "id": 30772,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10623:13:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "expression": {
                                "id": 30762,
                                "name": "BridgeMessage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30301,
                                "src": "10521:13:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                                  "typeString": "type(library BridgeMessage)"
                                }
                              },
                              "id": 30763,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getDetailsHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 29960,
                              "src": "10521:28:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_bytes32_$",
                                "typeString": "function (string memory,string memory,uint8) pure returns (bytes32)"
                              }
                            },
                            "id": 30773,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10521:129:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "10506:144:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 30775,
                        "nodeType": "ExpressionStatement",
                        "src": "10506:144:34"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    30794,
                    30796
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30794,
                      "mutability": "mutable",
                      "name": "_domain",
                      "nodeType": "VariableDeclaration",
                      "scope": 30810,
                      "src": "10920:14:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 30793,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10920:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 30796,
                      "mutability": "mutable",
                      "name": "_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 30810,
                      "src": "10936:11:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 30795,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "10936:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30801,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30799,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30722,
                        "src": "10976:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 30797,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30351,
                        "src": "10951:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                          "typeString": "contract ITokenRegistry"
                        }
                      },
                      "id": 30798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTokenId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33686,
                      "src": "10951:24:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint32_$_t_bytes32_$",
                        "typeString": "function (address) view external returns (uint32,bytes32)"
                      }
                    },
                    "id": 30800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10951:32:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint32_$_t_bytes32_$",
                      "typeString": "tuple(uint32,bytes32)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10919:64:34"
                },
                {
                  "expression": {
                    "id": 30808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 30802,
                      "name": "_tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30727,
                      "src": "10993:8:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 30805,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30794,
                          "src": "11032:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "id": 30806,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30796,
                          "src": "11041:3:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 30803,
                          "name": "BridgeMessage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30301,
                          "src": "11004:13:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                            "typeString": "type(library BridgeMessage)"
                          }
                        },
                        "id": 30804,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "formatTokenId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 29928,
                        "src": "11004:27:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$returns$_t_bytes29_$",
                          "typeString": "function (uint32,bytes32) pure returns (bytes29)"
                        }
                      },
                      "id": 30807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11004:41:34",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      }
                    },
                    "src": "10993:52:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "id": 30809,
                  "nodeType": "ExpressionStatement",
                  "src": "10993:52:34"
                }
              ]
            },
            "documentation": {
              "id": 30720,
              "nodeType": "StructuredDocumentation",
              "src": "9337:471:34",
              "text": " @notice Take from msg.sender as part of sending tokens across chains\n @dev Locks canonical tokens in escrow in BridgeRouter\n      OR Burns representation tokens\n @param _token The token to pull from the sender\n @param _amount The amount to pull from the sender\n @return _tokenId the bytes canonical token identifier\n @return _detailsHash the hash of the canonical token details (name,\n         symbol, decimal)"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_takeTokens",
            "parameters": {
              "id": 30725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30722,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 30811,
                  "src": "9834:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9834:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30724,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 30811,
                  "src": "9850:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 30723,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9850:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9833:33:34"
            },
            "returnParameters": {
              "id": 30730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30727,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30811,
                  "src": "9901:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30726,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "9901:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30729,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 30811,
                  "src": "9919:20:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 30728,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9919:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9900:40:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30843,
            "nodeType": "FunctionDefinition",
            "src": "11542:473:34",
            "body": {
              "id": 30842,
              "nodeType": "Block",
              "src": "11667:348:34",
              "statements": [
                {
                  "assignments": [
                    30822
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30822,
                      "mutability": "mutable",
                      "name": "_remote",
                      "nodeType": "VariableDeclaration",
                      "scope": 30842,
                      "src": "11741:15:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 30821,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11741:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30826,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30824,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30814,
                        "src": "11775:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 30823,
                      "name": "_mustHaveRemote",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46767,
                      "src": "11759:15:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) view returns (bytes32)"
                      }
                    },
                    "id": 30825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11759:29:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11741:47:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30833,
                        "name": "_destination",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30814,
                        "src": "11905:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30834,
                        "name": "_remote",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30822,
                        "src": "11931:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 30837,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30816,
                            "src": "11980:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          {
                            "id": 30838,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30818,
                            "src": "11990:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            },
                            {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          ],
                          "expression": {
                            "id": 30835,
                            "name": "BridgeMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30301,
                            "src": "11952:13:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                              "typeString": "type(library BridgeMessage)"
                            }
                          },
                          "id": 30836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "formatMessage",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29750,
                          "src": "11952:27:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes29_$_t_bytes29_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes29,bytes29) view returns (bytes memory)"
                          }
                        },
                        "id": 30839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11952:46:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 30828,
                                "name": "xAppConnectionManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 46780,
                                "src": "11853:21:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                                  "typeString": "contract XAppConnectionManager"
                                }
                              },
                              "id": 30829,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "home",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 44639,
                              "src": "11853:26:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Home_$43790_$",
                                "typeString": "function () view external returns (contract Home)"
                              }
                            },
                            "id": 30830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11853:28:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Home_$43790",
                              "typeString": "contract Home"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Home_$43790",
                              "typeString": "contract Home"
                            }
                          ],
                          "id": 30827,
                          "name": "Home",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43790,
                          "src": "11848:4:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Home_$43790_$",
                            "typeString": "type(contract Home)"
                          }
                        },
                        "id": 30831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11848:34:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Home_$43790",
                          "typeString": "contract Home"
                        }
                      },
                      "id": 30832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "dispatch",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 43526,
                      "src": "11848:43:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,bytes32,bytes memory) external"
                      }
                    },
                    "id": 30840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11848:160:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30841,
                  "nodeType": "ExpressionStatement",
                  "src": "11848:160:34"
                }
              ]
            },
            "documentation": {
              "id": 30812,
              "nodeType": "StructuredDocumentation",
              "src": "11058:479:34",
              "text": " @notice Dispatch a message via Nomad to a destination domain\n         addressed to the remote BridgeRouter on that chain\n @dev Message will trigger `handle` method on the remote BridgeRouter\n      when it is received on the destination chain\n @param _destination The domain of the destination chain\n @param _tokenId The canonical token identifier for the transfer message\n @param _action The contents of the transfer message"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_sendTransferMessage",
            "parameters": {
              "id": 30819,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30814,
                  "mutability": "mutable",
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 30843,
                  "src": "11581:19:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30813,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11581:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30816,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30843,
                  "src": "11610:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30815,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11610:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30818,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 30843,
                  "src": "11636:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30817,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "11636:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11571:86:34"
            },
            "returnParameters": {
              "id": 30820,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11667:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30874,
            "nodeType": "FunctionDefinition",
            "src": "12529:421:34",
            "body": {
              "id": 30873,
              "nodeType": "Block",
              "src": "12667:283:34",
              "statements": [
                {
                  "assignments": [
                    30856
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30856,
                      "mutability": "mutable",
                      "name": "_recipient",
                      "nodeType": "VariableDeclaration",
                      "scope": 30873,
                      "src": "12735:18:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 30855,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12735:7:34",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30860,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30857,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30852,
                        "src": "12756:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "evmRecipient",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30097,
                      "src": "12756:20:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_address_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (address)"
                      }
                    },
                    "id": 30859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12756:22:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12735:43:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30862,
                        "name": "_origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30846,
                        "src": "12823:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30863,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30848,
                        "src": "12832:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30864,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30850,
                        "src": "12840:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 30865,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30852,
                        "src": "12850:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 30866,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30856,
                        "src": "12859:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 30861,
                      "name": "_giveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31014,
                      "src": "12811:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint32,uint32,bytes29,bytes29,address) returns (address)"
                      }
                    },
                    "id": 30867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12811:59:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 30868,
                  "nodeType": "ExpressionStatement",
                  "src": "12811:59:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 30870,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30856,
                        "src": "12932:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 30869,
                      "name": "_dust",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31090,
                      "src": "12926:5:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 30871,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12926:17:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 30872,
                  "nodeType": "ExpressionStatement",
                  "src": "12926:17:34"
                }
              ]
            },
            "documentation": {
              "id": 30844,
              "nodeType": "StructuredDocumentation",
              "src": "12072:452:34",
              "text": " @notice Handles an incoming Transfer message.\n If the token is of local origin, the amount is sent from escrow.\n Otherwise, a representation token is minted.\n @param _origin The domain of the chain from which the transfer originated\n @param _nonce The unique identifier for the message from origin to\n        destination\n @param _tokenId The token ID\n @param _action The action"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_handleTransfer",
            "parameters": {
              "id": 30853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30846,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 30874,
                  "src": "12563:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30845,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12563:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30848,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 30874,
                  "src": "12587:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30847,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12587:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30850,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30874,
                  "src": "12610:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30849,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12610:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30852,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 30874,
                  "src": "12636:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30851,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "12636:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12553:104:34"
            },
            "returnParameters": {
              "id": 30854,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12667:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 30943,
            "nodeType": "FunctionDefinition",
            "src": "13426:1292:34",
            "body": {
              "id": 30942,
              "nodeType": "Block",
              "src": "13570:1148:34",
              "statements": [
                {
                  "assignments": [
                    30887
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30887,
                      "mutability": "mutable",
                      "name": "_hook",
                      "nodeType": "VariableDeclaration",
                      "scope": 30942,
                      "src": "13634:13:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 30886,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13634:7:34",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30891,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30888,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30883,
                        "src": "13650:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30889,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "evmHook",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30171,
                      "src": "13650:15:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_address_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (address)"
                      }
                    },
                    "id": 30890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13650:17:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13634:33:34"
                },
                {
                  "assignments": [
                    30893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30893,
                      "mutability": "mutable",
                      "name": "_token",
                      "nodeType": "VariableDeclaration",
                      "scope": 30942,
                      "src": "13700:14:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 30892,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13700:7:34",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30901,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30895,
                        "name": "_origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30877,
                        "src": "13729:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30896,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30879,
                        "src": "13738:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 30897,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30881,
                        "src": "13746:8:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 30898,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30883,
                        "src": "13756:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 30899,
                        "name": "_hook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30887,
                        "src": "13765:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 30894,
                      "name": "_giveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31014,
                      "src": "13717:11:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$_t_address_$returns$_t_address_$",
                        "typeString": "function (uint32,uint32,bytes29,bytes29,address) returns (address)"
                      }
                    },
                    "id": 30900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13717:54:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13700:71:34"
                },
                {
                  "assignments": [
                    30903
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30903,
                      "mutability": "mutable",
                      "name": "_call",
                      "nodeType": "VariableDeclaration",
                      "scope": 30942,
                      "src": "13844:18:34",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 30902,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "13844:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30929,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 30906,
                            "name": "IBridgeHook",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 33543,
                            "src": "13901:11:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBridgeHook_$33543_$",
                              "typeString": "type(contract IBridgeHook)"
                            }
                          },
                          "id": 30907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "onReceive",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 33542,
                          "src": "13901:21:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_declaration_nonpayable$_t_uint32_$_t_bytes32_$_t_uint32_$_t_bytes32_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                            "typeString": "function IBridgeHook.onReceive(uint32,bytes32,uint32,bytes32,address,uint256,bytes memory)"
                          }
                        },
                        "id": 30908,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "selector",
                        "nodeType": "MemberAccess",
                        "src": "13901:30:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "id": 30909,
                        "name": "_origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30877,
                        "src": "13945:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 30910,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30883,
                            "src": "13966:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 30191,
                          "src": "13966:14:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 30912,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13966:16:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 30913,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30881,
                            "src": "13996:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "domain",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29983,
                          "src": "13996:15:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (uint32)"
                          }
                        },
                        "id": 30915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13996:17:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 30916,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30881,
                            "src": "14027:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 30003,
                          "src": "14027:11:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (bytes32)"
                          }
                        },
                        "id": 30918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14027:13:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 30919,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30893,
                        "src": "14054:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 30920,
                            "name": "_action",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30883,
                            "src": "14074:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "amnt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 30112,
                          "src": "14074:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) pure returns (uint256)"
                          }
                        },
                        "id": 30922,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14074:14:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 30923,
                                "name": "_action",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30883,
                                "src": "14102:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes29",
                                  "typeString": "bytes29"
                                }
                              },
                              "id": 30924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "extraData",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 30220,
                              "src": "14102:17:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes29_$bound_to$_t_bytes29_$",
                                "typeString": "function (bytes29) pure returns (bytes29)"
                              }
                            },
                            "id": 30925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14102:19:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes29",
                              "typeString": "bytes29"
                            }
                          },
                          "id": 30926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "clone",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29466,
                          "src": "14102:25:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes29_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes29_$",
                            "typeString": "function (bytes29) view returns (bytes memory)"
                          }
                        },
                        "id": 30927,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14102:27:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 30904,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -1,
                        "src": "13865:3:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 30905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodeWithSelector",
                      "nodeType": "MemberAccess",
                      "src": "13865:22:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes4) pure returns (bytes memory)"
                      }
                    },
                    "id": 30928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13865:274:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13844:295:34"
                },
                {
                  "assignments": [
                    30931,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30931,
                      "mutability": "mutable",
                      "name": "_success",
                      "nodeType": "VariableDeclaration",
                      "scope": 30942,
                      "src": "14435:13:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 30930,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14435:4:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 30936,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 30934,
                        "name": "_call",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30903,
                        "src": "14465:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 30932,
                        "name": "_hook",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30887,
                        "src": "14454:5:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 30933,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "14454:10:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 30935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14454:17:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14434:37:34"
                },
                {
                  "condition": {
                    "id": 30938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "14533:9:34",
                    "subExpression": {
                      "id": 30937,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30931,
                      "src": "14534:8:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 30941,
                  "nodeType": "IfStatement",
                  "src": "14529:183:34",
                  "trueBody": {
                    "id": 30940,
                    "nodeType": "Block",
                    "src": "14544:168:34",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "14567:135:34",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14585:28:34",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "returndatasize",
                                  "nodeType": "YulIdentifier",
                                  "src": "14597:14:34"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14597:16:34"
                              },
                              "variables": [
                                {
                                  "name": "data",
                                  "nodeType": "YulTypedName",
                                  "src": "14589:4:34",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14645:1:34",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14648:1:34",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "14651:4:34"
                                  }
                                ],
                                "functionName": {
                                  "name": "returndatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "14630:14:34"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14630:26:34"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14630:26:34"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "14680:1:34",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "14683:4:34"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "14673:6:34"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14673:15:34"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "14673:15:34"
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [],
                        "id": 30939,
                        "nodeType": "InlineAssembly",
                        "src": "14558:144:34"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 30875,
              "nodeType": "StructuredDocumentation",
              "src": "12956:465:34",
              "text": " @notice Handles an incoming TransferToHook message.\n @dev The hook is called AFTER tokens have been transferred to the hook\n      contract. If this hook errors, the bridge WILL revert.\n @param _origin The domain of the chain from which the transfer originated\n @param _nonce The unique identifier for the message from origin to destination\n @param _tokenId The token ID\n @param _action The action"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_handleTransferToHook",
            "parameters": {
              "id": 30884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30877,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 30943,
                  "src": "13466:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30876,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13466:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30879,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 30943,
                  "src": "13490:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30878,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13490:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30881,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 30943,
                  "src": "13513:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30880,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13513:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30883,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 30943,
                  "src": "13539:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30882,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "13539:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13456:104:34"
            },
            "returnParameters": {
              "id": 30885,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13570:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 31014,
            "nodeType": "FunctionDefinition",
            "src": "15331:1077:34",
            "body": {
              "id": 31013,
              "nodeType": "Block",
              "src": "15518:890:34",
              "statements": [
                {
                  "expression": {
                    "id": 30969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 30959,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30957,
                      "src": "15763:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 30962,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30950,
                              "src": "15816:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 30963,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "domain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29983,
                            "src": "15816:15:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint32_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (uint32)"
                            }
                          },
                          "id": 30964,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15816:17:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 30965,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30950,
                              "src": "15847:8:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes29",
                                "typeString": "bytes29"
                              }
                            },
                            "id": 30966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 30003,
                            "src": "15847:11:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                              "typeString": "function (bytes29) pure returns (bytes32)"
                            }
                          },
                          "id": 30967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15847:13:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 30960,
                          "name": "tokenRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 30351,
                          "src": "15772:13:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                            "typeString": "contract ITokenRegistry"
                          }
                        },
                        "id": 30961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "ensureLocalToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 33659,
                        "src": "15772:30:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (uint32,bytes32) external returns (address)"
                        }
                      },
                      "id": 30968,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15772:98:34",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15763:107:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 30970,
                  "nodeType": "ExpressionStatement",
                  "src": "15763:107:34"
                },
                {
                  "assignments": [
                    30972
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 30972,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 31013,
                      "src": "15908:15:34",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 30971,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15908:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 30976,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 30973,
                        "name": "_action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30952,
                        "src": "15926:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 30974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "amnt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30112,
                      "src": "15926:12:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_uint256_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (uint256)"
                      }
                    },
                    "id": 30975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15926:14:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15908:32:34"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 30979,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30957,
                        "src": "16040:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 30977,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30351,
                        "src": "16012:13:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                          "typeString": "contract ITokenRegistry"
                        }
                      },
                      "id": 30978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isLocalOrigin",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33650,
                      "src": "16012:27:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 30980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16012:35:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 30997,
                    "nodeType": "Block",
                    "src": "16119:86:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 30989,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30957,
                              "src": "16143:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 30990,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30972,
                              "src": "16151:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 30991,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30954,
                              "src": "16160:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 30992,
                                  "name": "_action",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30952,
                                  "src": "16172:7:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes29",
                                    "typeString": "bytes29"
                                  }
                                },
                                "id": 30993,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "detailsHash",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 30127,
                                "src": "16172:19:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                                  "typeString": "function (bytes29) pure returns (bytes32)"
                                }
                              },
                              "id": 30994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16172:21:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 30988,
                            "name": "_giveRepr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31061,
                            "src": "16133:9:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,uint256,address,bytes32)"
                            }
                          },
                          "id": 30995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16133:61:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 30996,
                        "nodeType": "ExpressionStatement",
                        "src": "16133:61:34"
                      }
                    ]
                  },
                  "id": 30998,
                  "nodeType": "IfStatement",
                  "src": "16008:197:34",
                  "trueBody": {
                    "id": 30987,
                    "nodeType": "Block",
                    "src": "16049:64:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 30982,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30957,
                              "src": "16074:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 30983,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30972,
                              "src": "16082:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 30984,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30954,
                              "src": "16091:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 30981,
                            "name": "_giveLocal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31033,
                            "src": "16063:10:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (address,uint256,address)"
                            }
                          },
                          "id": 30985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16063:39:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 30986,
                        "nodeType": "ExpressionStatement",
                        "src": "16063:39:34"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 31001,
                            "name": "_origin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30946,
                            "src": "16286:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 31002,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 30948,
                            "src": "16295:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 31000,
                          "name": "_originAndNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31111,
                          "src": "16270:15:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$",
                            "typeString": "function (uint32,uint32) pure returns (uint64)"
                          }
                        },
                        "id": 31003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16270:32:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 31004,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30957,
                        "src": "16316:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31005,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30954,
                        "src": "16336:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 31008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16368:1:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 31007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16360:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 31006,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "16360:7:34",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 31009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16360:10:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 31010,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30972,
                        "src": "16384:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 30999,
                      "name": "Receive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30387,
                      "src": "16249:7:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint64,address,address,address,uint256)"
                      }
                    },
                    "id": 31011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16249:152:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31012,
                  "nodeType": "EmitStatement",
                  "src": "16244:157:34"
                }
              ]
            },
            "documentation": {
              "id": 30944,
              "nodeType": "StructuredDocumentation",
              "src": "14724:602:34",
              "text": " @notice Send tokens to a specified recipient.\n @dev Unlocks canonical tokens from escrow in BridgeRouter\n      OR Mints representation tokens\n @param _origin The domain of the chain from which the transfer originated\n @param _nonce The unique identifier for the message from origin to\n        destination\n @param _tokenId The canonical token identifier to credit\n @param _action The contents of the transfer message\n @param _recipient The recipient that will receive tokens\n @return _token The address of the local token contract"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_giveTokens",
            "parameters": {
              "id": 30955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30946,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 31014,
                  "src": "15361:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30945,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15361:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30948,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 31014,
                  "src": "15385:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 30947,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15385:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30950,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 31014,
                  "src": "15408:16:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30949,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15408:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30952,
                  "mutability": "mutable",
                  "name": "_action",
                  "nodeType": "VariableDeclaration",
                  "scope": 31014,
                  "src": "15434:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 30951,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "15434:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 30954,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 31014,
                  "src": "15459:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15459:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15351:132:34"
            },
            "returnParameters": {
              "id": 30958,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 30957,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 31014,
                  "src": "15502:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 30956,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15502:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15501:16:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 31033,
            "nodeType": "FunctionDefinition",
            "src": "16672:185:34",
            "body": {
              "id": 31032,
              "nodeType": "Block",
              "src": "16792:65:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31028,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31021,
                        "src": "16830:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31029,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31019,
                        "src": "16842:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 31025,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31017,
                            "src": "16809:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 31024,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27517,
                          "src": "16802:6:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 31026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16802:14:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$27517",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 31027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27551,
                      "src": "16802:27:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 31030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16802:48:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31031,
                  "nodeType": "ExpressionStatement",
                  "src": "16802:48:34"
                }
              ]
            },
            "documentation": {
              "id": 31015,
              "nodeType": "StructuredDocumentation",
              "src": "16414:253:34",
              "text": " @notice Gives local tokens on inbound bridge message\n @dev May record ProcessFailure instead of transferring the asset itself\n @param _token The asset\n @param _amount The amount\n @param _recipient The recipient"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_giveLocal",
            "parameters": {
              "id": 31022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31017,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 31033,
                  "src": "16701:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31016,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16701:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31019,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 31033,
                  "src": "16725:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31018,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16725:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31021,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 31033,
                  "src": "16750:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31020,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16750:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16691:83:34"
            },
            "returnParameters": {
              "id": 31023,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16792:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 31061,
            "nodeType": "FunctionDefinition",
            "src": "17153:416:34",
            "body": {
              "id": 31060,
              "nodeType": "Block",
              "src": "17294:275:34",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31049,
                        "name": "_recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31040,
                        "src": "17433:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31050,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31038,
                        "src": "17445:7:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 31046,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31036,
                            "src": "17420:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 31045,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "17407:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 31047,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17407:20:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 31048,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33589,
                      "src": "17407:25:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 31051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17407:46:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31052,
                  "nodeType": "ExpressionStatement",
                  "src": "17407:46:34"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31057,
                        "name": "_detailsHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31042,
                        "src": "17549:12:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 31054,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31036,
                            "src": "17526:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 31053,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "17513:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 31055,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17513:20:34",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 31056,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setDetailsHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33594,
                      "src": "17513:35:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) external"
                      }
                    },
                    "id": 31058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17513:49:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31059,
                  "nodeType": "ExpressionStatement",
                  "src": "17513:49:34"
                }
              ]
            },
            "documentation": {
              "id": 31034,
              "nodeType": "StructuredDocumentation",
              "src": "16863:285:34",
              "text": " @notice Gives remote tokens on inbound bridge message\n @dev Mints the appropriate amount to the user\n @param _token The asset\n @param _amount The amount\n @param _recipient The recipient\n @param _detailsHash The hash of the token details"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_giveRepr",
            "parameters": {
              "id": 31043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31036,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 31061,
                  "src": "17181:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31035,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17181:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31038,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 31061,
                  "src": "17205:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31037,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17205:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31040,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 31061,
                  "src": "17230:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31039,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17230:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31042,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 31061,
                  "src": "17258:20:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31041,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "17258:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17171:113:34"
            },
            "returnParameters": {
              "id": 31044,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17294:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 31090,
            "nodeType": "FunctionDefinition",
            "src": "17954:692:34",
            "body": {
              "id": 31089,
              "nodeType": "Block",
              "src": "17998:648:34",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 31078,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 31070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 31067,
                          "name": "_recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31064,
                          "src": "18025:10:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 31068,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "src": "18025:18:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "id": 31069,
                        "name": "DUST_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30349,
                        "src": "18046:11:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18025:32:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 31077,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 31073,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "18081:4:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                                "typeString": "contract BaseBridgeRouter"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                                "typeString": "contract BaseBridgeRouter"
                              }
                            ],
                            "id": 31072,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18073:7:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 31071,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "18073:7:34",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 31074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18073:13:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 31075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "src": "18073:21:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 31076,
                        "name": "DUST_AMOUNT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30349,
                        "src": "18098:11:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18073:36:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "18025:84:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 31088,
                  "nodeType": "IfStatement",
                  "src": "18008:632:34",
                  "trueBody": {
                    "id": 31087,
                    "nodeType": "Block",
                    "src": "18120:520:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 31084,
                              "name": "DUST_AMOUNT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30349,
                              "src": "18617:11:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 31081,
                                  "name": "_recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 31064,
                                  "src": "18600:10:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 31080,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18592:8:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 31079,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18592:8:34",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 31082,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18592:19:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "id": 31083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "send",
                            "nodeType": "MemberAccess",
                            "src": "18592:24:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256) returns (bool)"
                            }
                          },
                          "id": 31085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18592:37:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 31086,
                        "nodeType": "ExpressionStatement",
                        "src": "18592:37:34"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 31062,
              "nodeType": "StructuredDocumentation",
              "src": "17633:316:34",
              "text": " @notice Dust the recipient. This feature allows chain operators to use\n the Bridge as a faucet if so desired. Any gas asset held by the\n bridge will be slowly sent to users who need initial gas bootstrapping\n @dev Does not dust if insufficient funds, or if user has funds already"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_dust",
            "parameters": {
              "id": 31065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31064,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 31090,
                  "src": "17969:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31063,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17969:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17968:20:34"
            },
            "returnParameters": {
              "id": 31066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17998:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 31111,
            "nodeType": "FunctionDefinition",
            "src": "19095:171:34",
            "body": {
              "id": 31110,
              "nodeType": "Block",
              "src": "19210:56:34",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 31108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 31105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 31102,
                                "name": "_origin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31093,
                                "src": "19235:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 31101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19228:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 31100,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "19228:6:34",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 31103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19228:15:34",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 31104,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19247:2:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "19228:21:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 31106,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "19227:23:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "id": 31107,
                      "name": "_nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31095,
                      "src": "19253:6:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "19227:32:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 31099,
                  "id": 31109,
                  "nodeType": "Return",
                  "src": "19220:39:34"
                }
              ]
            },
            "documentation": {
              "id": 31091,
              "nodeType": "StructuredDocumentation",
              "src": "18702:388:34",
              "text": " @notice Internal utility function that combines\n         `_origin` and `_nonce`.\n @dev Both origin and nonce should be less than 2^32 - 1\n @param _origin Domain of chain where the transfer originated\n @param _nonce The unique identifier for the message from origin to\ndestination\n @return Returns (`_origin` << 32) & `_nonce`"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_originAndNonce",
            "parameters": {
              "id": 31096,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31093,
                  "mutability": "mutable",
                  "name": "_origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 31111,
                  "src": "19120:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 31092,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19120:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31095,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 31111,
                  "src": "19136:13:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 31094,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "19136:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19119:31:34"
            },
            "returnParameters": {
              "id": 31099,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31098,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 31111,
                  "src": "19198:6:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 31097,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "19198:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19197:8:34"
            },
            "scope": 31120,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 31119,
            "nodeType": "FunctionDefinition",
            "src": "19469:84:34",
            "body": {
              "id": 31118,
              "nodeType": "Block",
              "src": "19524:29:34",
              "statements": []
            },
            "baseFunctions": [
              23135
            ],
            "documentation": {
              "id": 31112,
              "nodeType": "StructuredDocumentation",
              "src": "19272:192:34",
              "text": " @dev should be impossible to renounce ownership;\n      we override OpenZeppelin OwnableUpgradeable's\n      implementation of renounceOwnership to make it a no-op"
            },
            "functionSelector": "715018a6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31116,
                "modifierName": {
                  "id": 31115,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "19514:9:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "19514:9:34"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 31114,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19505:8:34"
            },
            "parameters": {
              "id": 31113,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19495:2:34"
            },
            "returnParameters": {
              "id": 31117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19524:0:34"
            },
            "scope": 31120,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 30331,
              "name": "Version0",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 44622,
              "src": "1162:8:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Version0_$44622",
                "typeString": "contract Version0"
              }
            },
            "id": 30332,
            "nodeType": "InheritanceSpecifier",
            "src": "1162:8:34"
          },
          {
            "baseName": {
              "id": 30333,
              "name": "Router",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46768,
              "src": "1172:6:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Router_$46768",
                "typeString": "contract Router"
              }
            },
            "id": 30334,
            "nodeType": "InheritanceSpecifier",
            "src": "1172:6:34"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 30330,
          "nodeType": "StructuredDocumentation",
          "src": "1089:34:34",
          "text": " @title BaseBridgeRouter"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "BaseBridgeRouter",
        "scope": 31251
      },
      {
        "id": 31124,
        "nodeType": "ContractDefinition",
        "src": "19588:46:34",
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 31122,
              "name": "BaseBridgeRouter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31120,
              "src": "19613:16:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                "typeString": "contract BaseBridgeRouter"
              }
            },
            "id": 31123,
            "nodeType": "InheritanceSpecifier",
            "src": "19613:16:34"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          31120,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 31121,
          "nodeType": "StructuredDocumentation",
          "src": "19557:30:34",
          "text": " @title BridgeRouter"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          31124,
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "BridgeRouter",
        "scope": 31251
      },
      {
        "id": 31250,
        "nodeType": "ContractDefinition",
        "src": "19675:2042:34",
        "nodes": [
          {
            "id": 31130,
            "nodeType": "UsingForDirective",
            "src": "19731:27:34",
            "libraryName": {
              "id": 31128,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27730,
              "src": "19737:9:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$27730",
                "typeString": "library SafeERC20"
              }
            },
            "typeName": {
              "id": 31129,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 27517,
              "src": "19751:6:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$27517",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "id": 31132,
            "nodeType": "VariableDeclaration",
            "src": "19812:44:34",
            "constant": false,
            "functionSelector": "4fb3ccc5",
            "mutability": "immutable",
            "name": "accountant",
            "scope": 31250,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IEventAccountant_$33635",
              "typeString": "contract IEventAccountant"
            },
            "typeName": {
              "id": 31131,
              "name": "IEventAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33635,
              "src": "19812:16:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                "typeString": "contract IEventAccountant"
              }
            },
            "visibility": "public"
          },
          {
            "id": 31144,
            "nodeType": "FunctionDefinition",
            "src": "19899:92:34",
            "body": {
              "id": 31143,
              "nodeType": "Block",
              "src": "19932:59:34",
              "statements": [
                {
                  "expression": {
                    "id": 31141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 31137,
                      "name": "accountant",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31132,
                      "src": "19942:10:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                        "typeString": "contract IEventAccountant"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 31139,
                          "name": "_accountant",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31134,
                          "src": "19972:11:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 31138,
                        "name": "IEventAccountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 33635,
                        "src": "19955:16:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IEventAccountant_$33635_$",
                          "typeString": "type(contract IEventAccountant)"
                        }
                      },
                      "id": 31140,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19955:29:34",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                        "typeString": "contract IEventAccountant"
                      }
                    },
                    "src": "19942:42:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                      "typeString": "contract IEventAccountant"
                    }
                  },
                  "id": 31142,
                  "nodeType": "ExpressionStatement",
                  "src": "19942:42:34"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "parameters": {
              "id": 31135,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31134,
                  "mutability": "mutable",
                  "name": "_accountant",
                  "nodeType": "VariableDeclaration",
                  "scope": 31144,
                  "src": "19911:19:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31133,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19911:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19910:21:34"
            },
            "returnParameters": {
              "id": 31136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19932:0:34"
            },
            "scope": 31250,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31214,
            "nodeType": "FunctionDefinition",
            "src": "20104:692:34",
            "body": {
              "id": 31213,
              "nodeType": "Block",
              "src": "20156:640:34",
              "statements": [
                {
                  "assignments": [
                    31153
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31153,
                      "mutability": "mutable",
                      "name": "_assets",
                      "nodeType": "VariableDeclaration",
                      "scope": 31213,
                      "src": "20166:34:34",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                        "typeString": "address payable[14]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 31150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "20166:15:34",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 31152,
                        "length": {
                          "hexValue": "3134",
                          "id": 31151,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20182:2:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_14_by_1",
                            "typeString": "int_const 14"
                          },
                          "value": "14"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "20166:19:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_payable_$14_storage_ptr",
                          "typeString": "address payable[14]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31157,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 31154,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31132,
                        "src": "20203:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                          "typeString": "contract IEventAccountant"
                        }
                      },
                      "id": 31155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "affectedAssets",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33627,
                      "src": "20203:25:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$__$returns$_t_array$_t_address_payable_$14_memory_ptr_$",
                        "typeString": "function () pure external returns (address payable[14] memory)"
                      }
                    },
                    "id": 31156,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20203:27:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                      "typeString": "address payable[14] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20166:64:34"
                },
                {
                  "body": {
                    "id": 31211,
                    "nodeType": "Block",
                    "src": "20273:517:34",
                    "statements": [
                      {
                        "assignments": [
                          31169
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 31169,
                            "mutability": "mutable",
                            "name": "_asset",
                            "nodeType": "VariableDeclaration",
                            "scope": 31211,
                            "src": "20287:13:34",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$27517",
                              "typeString": "contract IERC20"
                            },
                            "typeName": {
                              "id": 31168,
                              "name": "IERC20",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 27517,
                              "src": "20287:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 31175,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 31171,
                                "name": "_assets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31153,
                                "src": "20310:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_payable_$14_memory_ptr",
                                  "typeString": "address payable[14] memory"
                                }
                              },
                              "id": 31173,
                              "indexExpression": {
                                "id": 31172,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31159,
                                "src": "20318:1:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20310:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 31170,
                            "name": "IERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27517,
                            "src": "20303:6:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                              "typeString": "type(contract IERC20)"
                            }
                          },
                          "id": 31174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20303:18:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$27517",
                            "typeString": "contract IERC20"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20287:34:34"
                      },
                      {
                        "assignments": [
                          31177
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 31177,
                            "mutability": "mutable",
                            "name": "_balance",
                            "nodeType": "VariableDeclaration",
                            "scope": 31211,
                            "src": "20335:16:34",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 31176,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20335:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 31185,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 31182,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "20379:4:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EthereumBridgeRouter_$31250",
                                    "typeString": "contract EthereumBridgeRouter"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EthereumBridgeRouter_$31250",
                                    "typeString": "contract EthereumBridgeRouter"
                                  }
                                ],
                                "id": 31181,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "20371:7:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 31180,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "20371:7:34",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 31183,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "20371:13:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "id": 31178,
                              "name": "_asset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31169,
                              "src": "20354:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 31179,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27456,
                            "src": "20354:16:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 31184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20354:31:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20335:50:34"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 31188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 31186,
                            "name": "_balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31177,
                            "src": "20403:8:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 31187,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20414:1:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20403:12:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 31210,
                        "nodeType": "IfStatement",
                        "src": "20399:381:34",
                        "trueBody": {
                          "id": 31209,
                          "nodeType": "Block",
                          "src": "20417:363:34",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 31194,
                                        "name": "accountant",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 31132,
                                        "src": "20687:10:34",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                          "typeString": "contract IEventAccountant"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                          "typeString": "contract IEventAccountant"
                                        }
                                      ],
                                      "id": 31193,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "20679:7:34",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 31192,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "20679:7:34",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 31195,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20679:19:34",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "hexValue": "30",
                                    "id": 31196,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20700:1:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "expression": {
                                    "id": 31189,
                                    "name": "_asset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 31169,
                                    "src": "20664:6:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$27517",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 31191,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "approve",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 27486,
                                  "src": "20664:14:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 31197,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20664:38:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 31198,
                              "nodeType": "ExpressionStatement",
                              "src": "20664:38:34"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 31204,
                                        "name": "accountant",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 31132,
                                        "src": "20743:10:34",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                          "typeString": "contract IEventAccountant"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                          "typeString": "contract IEventAccountant"
                                        }
                                      ],
                                      "id": 31203,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "20735:7:34",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 31202,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "20735:7:34",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 31205,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20735:19:34",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 31206,
                                    "name": "_balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 31177,
                                    "src": "20756:8:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 31199,
                                    "name": "_asset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 31169,
                                    "src": "20720:6:34",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$27517",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 31201,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "approve",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 27486,
                                  "src": "20720:14:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (address,uint256) external returns (bool)"
                                  }
                                },
                                "id": 31207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20720:45:34",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 31208,
                              "nodeType": "ExpressionStatement",
                              "src": "20720:45:34"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 31164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 31162,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31159,
                      "src": "20260:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "3134",
                      "id": 31163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20264:2:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_14_by_1",
                        "typeString": "int_const 14"
                      },
                      "value": "14"
                    },
                    "src": "20260:6:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 31212,
                  "initializationExpression": {
                    "assignments": [
                      31159
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 31159,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 31212,
                        "src": "20245:9:34",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 31158,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20245:7:34",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 31161,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 31160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20257:1:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "20245:13:34"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 31166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "20268:3:34",
                      "subExpression": {
                        "id": 31165,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31159,
                        "src": "20268:1:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 31167,
                    "nodeType": "ExpressionStatement",
                    "src": "20268:3:34"
                  },
                  "nodeType": "ForStatement",
                  "src": "20240:550:34"
                }
              ]
            },
            "documentation": {
              "id": 31145,
              "nodeType": "StructuredDocumentation",
              "src": "19997:102:34",
              "text": " @notice Approve funds remaining in the bridge router to be collected via accountant"
            },
            "functionSelector": "459f1383",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31148,
                "modifierName": {
                  "id": 31147,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "20146:9:34",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20146:9:34"
              }
            ],
            "name": "approveAffectedAssets",
            "parameters": {
              "id": 31146,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20134:2:34"
            },
            "returnParameters": {
              "id": 31149,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20156:0:34"
            },
            "scope": 31250,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 31249,
            "nodeType": "FunctionDefinition",
            "src": "21060:655:34",
            "body": {
              "id": 31248,
              "nodeType": "Block",
              "src": "21181:534:34",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 31227,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31217,
                        "src": "21550:6:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 31225,
                        "name": "accountant",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31132,
                        "src": "21523:10:34",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                          "typeString": "contract IEventAccountant"
                        }
                      },
                      "id": 31226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isAffectedAsset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33634,
                      "src": "21523:26:34",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 31228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21523:34:34",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 31246,
                    "nodeType": "Block",
                    "src": "21636:73:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 31242,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31221,
                              "src": "21678:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 31243,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31219,
                              "src": "21690:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 31239,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 31217,
                                  "src": "21657:6:34",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 31238,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 27517,
                                "src": "21650:6:34",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 31240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21650:14:34",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$27517",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 31241,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 27551,
                            "src": "21650:27:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$27517_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$27517_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 31244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21650:48:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 31245,
                        "nodeType": "ExpressionStatement",
                        "src": "21650:48:34"
                      }
                    ]
                  },
                  "id": 31247,
                  "nodeType": "IfStatement",
                  "src": "21519:190:34",
                  "trueBody": {
                    "id": 31237,
                    "nodeType": "Block",
                    "src": "21559:71:34",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 31232,
                              "name": "_token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31217,
                              "src": "21591:6:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 31233,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31221,
                              "src": "21599:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 31234,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31219,
                              "src": "21611:7:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 31229,
                              "name": "accountant",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31132,
                              "src": "21573:10:34",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IEventAccountant_$33635",
                                "typeString": "contract IEventAccountant"
                              }
                            },
                            "id": 31231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "record",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 33620,
                            "src": "21573:17:34",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) external"
                            }
                          },
                          "id": 31235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21573:46:34",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 31236,
                        "nodeType": "ExpressionStatement",
                        "src": "21573:46:34"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              31033
            ],
            "documentation": {
              "id": 31215,
              "nodeType": "StructuredDocumentation",
              "src": "20802:253:34",
              "text": " @notice Gives local tokens on inbound bridge message\n @dev May record ProcessFailure instead of transferring the asset itself\n @param _token The asset\n @param _amount The amount\n @param _recipient The recipient"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_giveLocal",
            "overrides": {
              "id": 31223,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21172:8:34"
            },
            "parameters": {
              "id": 31222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31217,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 31249,
                  "src": "21089:14:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31216,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21089:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31219,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 31249,
                  "src": "21113:15:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21113:7:34",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31221,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 31249,
                  "src": "21138:18:34",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21138:7:34",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21079:83:34"
            },
            "returnParameters": {
              "id": 31224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21181:0:34"
            },
            "scope": 31250,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 31126,
              "name": "BaseBridgeRouter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31120,
              "src": "19708:16:34",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseBridgeRouter_$31120",
                "typeString": "contract BaseBridgeRouter"
              }
            },
            "id": 31127,
            "nodeType": "InheritanceSpecifier",
            "src": "19708:16:34"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          31120,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 31125,
          "nodeType": "StructuredDocumentation",
          "src": "19636:38:34",
          "text": " @title EthereumBridgeRouter"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          31250,
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "EthereumBridgeRouter",
        "scope": 31251
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 34
}