{
  "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": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "representation",
          "type": "address"
        }
      ],
      "name": "TokenDeployed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "canonicalToRepresentation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "_id",
          "type": "bytes32"
        }
      ],
      "name": "ensureLocalToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_representation",
          "type": "address"
        }
      ],
      "name": "getCanonicalTokenId",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "getLocalAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_id",
          "type": "address"
        }
      ],
      "name": "getLocalAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "getRepresentationAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "_representation",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_local",
          "type": "address"
        }
      ],
      "name": "getTokenId",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenBeacon",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isLocalOrigin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        }
      ],
      "name": "mustHaveLocalToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_oldRepr",
          "type": "address"
        }
      ],
      "name": "oldReprToCurrentRepr",
      "outputs": [
        {
          "internalType": "address",
          "name": "_currentRepr",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "representationToCanonical",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenBeacon",
      "outputs": [
        {
          "internalType": "address",
          "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"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b506124e5806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001725760003560e01c8063715018a611620000e1578063ccf5a77c116200008d578063dc9685a7116200006f578063dc9685a71462000478578063f153768614620004a4578063f2fde38b14620004da5762000172565b8063ccf5a77c146200042c578063d82d053114620004365762000172565b8063b869d89a11620000c3578063b869d89a1462000380578063b9730eaf14620003ac578063c86415cb14620003e25762000172565b8063715018a6146200036c5780638da5cb5b14620003765762000172565b80632c3da59c116200014157806341bdc8b5116200012357806341bdc8b514620002cc578063485cc9551462000302578063589b3c6414620003405762000172565b80632c3da59c14620002965780633339df9614620002c25762000172565b806303e418c214620001775780630e71e25114620001cd5780631ecf6f9f146200022c57806328b1aea0146200024c575b600080fd5b620001ad600480360360208110156200018f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000510565b6040805163ffffffff909316835260208301919091528051918290030190f35b6200020360048036036020811015620001e557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000532565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b62000203600480360360208110156200024457600080fd5b503562000602565b62000294600480360360608110156200026457600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166200062a565b005b6200020360048036036040811015620002ae57600080fd5b5063ffffffff8135169060200135620006f6565b6200020362000793565b6200029460048036036020811015620002e457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620007af565b62000294600480360360408110156200031a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516620008a3565b62000203600480360360408110156200035857600080fd5b5063ffffffff813516906020013562000a0b565b6200029462000a4a565b6200020362000af9565b62000203600480360360408110156200039857600080fd5b5063ffffffff813516906020013562000b15565b620001ad60048036036020811015620003c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000bfa565b6200041860048036036020811015620003fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000c45565b604080519115158252519081900360200190f35b6200020362000c8b565b62000203600480360360408110156200044e57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000ca7565b62000203600480360360408110156200049057600080fd5b5063ffffffff813516906020013562000cbf565b620001ad60048036036020811015620004bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000d2d565b6200029460048036036020811015620004f257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000dae565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925290620005e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620005fb8160000151826020015162000cbf565b9392505050565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6200063462000f57565b73ffffffffffffffffffffffffffffffffffffffff166200065462000af9565b73ffffffffffffffffffffffffffffffffffffffff1614620006d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b620006e483838362000f5b565b620006f18383836200102d565b505050565b60008062000705848462000a0b565b905073ffffffffffffffffffffffffffffffffffffffff81166200078a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b620007b962000f57565b73ffffffffffffffffffffffffffffffffffffffff16620007d962000af9565b73ffffffffffffffffffffffffffffffffffffffff16146200085c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff1680620008bf5750620008bf62001147565b80620008ce575060005460ff16155b62000925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff161580156200098c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055620009d7826200115a565b8015620006f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000a17620012c1565b63ffffffff168363ffffffff16141562000a3e5762000a3682620012d2565b90506200078d565b6200078a838362000cbf565b62000a5462000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000a7462000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000af757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600062000b2162000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000b4162000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000bc457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000bd0838362000a0b565b905073ffffffffffffffffffffffffffffffffffffffff81166200078d576200078a8383620012d5565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000c805750600062000c86565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b60006200078a8362000cb98462001600565b62000a0b565b60008062000cce848462001619565b9050600062000cff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831662001672565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252829162000d9b5762000d86620012c1565b925062000d938462001600565b915062000da8565b8051602082015190935091505b50915091565b62000db862000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000dd862000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000e5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811662000ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620024856026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b63ffffffff831662000fce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff8116620010b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000620010be848462001619565b90506000620010ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831662001672565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b60006200115430620016b5565b15905090565b600054610100900460ff16806200117657506200117662001147565b8062001185575060005460ff16155b620011dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff161580156200124357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200128d620016bb565b8015620012bd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000620012cd620017eb565b905090565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff1690620013009062001f14565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f0801580156200134a573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200139657600080fd5b505af1158015620013ab573d6000803e3d6000fd5b50505050600080620013be85856200188a565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156200143a57818101518382015260200162001420565b50505050905090810190601f168015620014685780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200149d57818101518382015260200162001483565b50505050905090810190601f168015620014cb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620014ee57600080fd5b505af115801562001503573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6200152d62000af9565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200157a57600080fd5b505af11580156200158f573d6000803e3d6000fd5b50505050620015a08585856200102d565b620015ad85858562000f5b565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006200078a6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526024808201879052825180830390910181526044909101909152906200196a565b600080620016808362001990565b6bffffffffffffffffffffffff16905060006200169d84620019a4565b6bffffffffffffffffffffffff169091209392505050565b3b151590565b600054610100900460ff1680620016d75750620016d762001147565b80620016e6575060005460ff16155b6200173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff16158015620017a457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b620017ae620019b8565b620017b862001ad2565b8015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b1580156200185757600080fd5b505afa1580156200186c573d6000803e3d6000fd5b505050506040513d60208110156200188357600080fd5b5051905090565b60608060006200189a8462001c6c565b915050620018a88562001d44565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b8151600090602084016200198764ffffffffff8516828462001da6565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600054610100900460ff1680620019d45750620019d462001147565b80620019e3575060005460ff16155b62001a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff16158015620017b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001aee575062001aee62001147565b8062001afd575060005460ff16155b62001b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bbb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001bc762000f57565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff16111562001cd95760ff600882021684901c62001c948162001e03565b61ffff16841793508160ff1660101462001cb057601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c72565b50600f5b60ff8160ff16101562000da85760ff600882021684901c62001cff8162001e03565b61ffff16831792508160ff1660001462001d1b57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001cdd565b60006030815b600a8160ff16101562001d9f5760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d9357fe5b04935060010162001d4a565b5050919050565b60008062001db5848462001e37565b905060405181111562001dc6575060005b8062001df6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050620005fb565b6200198785858562001eaa565b600062001e1760048360ff16901c62001ebd565b60ff161760081b62ffff001662001e2e8262001ebd565b60ff1617919050565b818101828110156200078d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f8416918290811062001f0557fe5b016020015160f81c9392505050565b6105628062001f238339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a",
    "sourceMap": "1827:14420:38:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060043610620001725760003560e01c8063715018a611620000e1578063ccf5a77c116200008d578063dc9685a7116200006f578063dc9685a71462000478578063f153768614620004a4578063f2fde38b14620004da5762000172565b8063ccf5a77c146200042c578063d82d053114620004365762000172565b8063b869d89a11620000c3578063b869d89a1462000380578063b9730eaf14620003ac578063c86415cb14620003e25762000172565b8063715018a6146200036c5780638da5cb5b14620003765762000172565b80632c3da59c116200014157806341bdc8b5116200012357806341bdc8b514620002cc578063485cc9551462000302578063589b3c6414620003405762000172565b80632c3da59c14620002965780633339df9614620002c25762000172565b806303e418c214620001775780630e71e25114620001cd5780631ecf6f9f146200022c57806328b1aea0146200024c575b600080fd5b620001ad600480360360208110156200018f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000510565b6040805163ffffffff909316835260208301919091528051918290030190f35b6200020360048036036020811015620001e557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000532565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b62000203600480360360208110156200024457600080fd5b503562000602565b62000294600480360360608110156200026457600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166200062a565b005b6200020360048036036040811015620002ae57600080fd5b5063ffffffff8135169060200135620006f6565b6200020362000793565b6200029460048036036020811015620002e457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620007af565b62000294600480360360408110156200031a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516620008a3565b62000203600480360360408110156200035857600080fd5b5063ffffffff813516906020013562000a0b565b6200029462000a4a565b6200020362000af9565b62000203600480360360408110156200039857600080fd5b5063ffffffff813516906020013562000b15565b620001ad60048036036020811015620003c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000bfa565b6200041860048036036020811015620003fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000c45565b604080519115158252519081900360200190f35b6200020362000c8b565b62000203600480360360408110156200044e57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000ca7565b62000203600480360360408110156200049057600080fd5b5063ffffffff813516906020013562000cbf565b620001ad60048036036020811015620004bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000d2d565b6200029460048036036020811015620004f257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000dae565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925290620005e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620005fb8160000151826020015162000cbf565b9392505050565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6200063462000f57565b73ffffffffffffffffffffffffffffffffffffffff166200065462000af9565b73ffffffffffffffffffffffffffffffffffffffff1614620006d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b620006e483838362000f5b565b620006f18383836200102d565b505050565b60008062000705848462000a0b565b905073ffffffffffffffffffffffffffffffffffffffff81166200078a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b620007b962000f57565b73ffffffffffffffffffffffffffffffffffffffff16620007d962000af9565b73ffffffffffffffffffffffffffffffffffffffff16146200085c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff1680620008bf5750620008bf62001147565b80620008ce575060005460ff16155b62000925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff161580156200098c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055620009d7826200115a565b8015620006f157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000a17620012c1565b63ffffffff168363ffffffff16141562000a3e5762000a3682620012d2565b90506200078d565b6200078a838362000cbf565b62000a5462000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000a7462000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000af757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b600062000b2162000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000b4162000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000bc457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000bd0838362000a0b565b905073ffffffffffffffffffffffffffffffffffffffff81166200078d576200078a8383620012d5565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000c805750600062000c86565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b60006200078a8362000cb98462001600565b62000a0b565b60008062000cce848462001619565b9050600062000cff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831662001672565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252829162000d9b5762000d86620012c1565b925062000d938462001600565b915062000da8565b8051602082015190935091505b50915091565b62000db862000f57565b73ffffffffffffffffffffffffffffffffffffffff1662000dd862000af9565b73ffffffffffffffffffffffffffffffffffffffff161462000e5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811662000ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620024856026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b63ffffffff831662000fce57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff8116620010b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000620010be848462001619565b90506000620010ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831662001672565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b60006200115430620016b5565b15905090565b600054610100900460ff16806200117657506200117662001147565b8062001185575060005460ff16155b620011dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff161580156200124357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200128d620016bb565b8015620012bd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000620012cd620017eb565b905090565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff1690620013009062001f14565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f0801580156200134a573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200139657600080fd5b505af1158015620013ab573d6000803e3d6000fd5b50505050600080620013be85856200188a565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156200143a57818101518382015260200162001420565b50505050905090810190601f168015620014685780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200149d57818101518382015260200162001483565b50505050905090810190601f168015620014cb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620014ee57600080fd5b505af115801562001503573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b6200152d62000af9565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200157a57600080fd5b505af11580156200158f573d6000803e3d6000fd5b50505050620015a08585856200102d565b620015ad85858562000f5b565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006200078a6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1660208201526024808201879052825180830390910181526044909101909152906200196a565b600080620016808362001990565b6bffffffffffffffffffffffff16905060006200169d84620019a4565b6bffffffffffffffffffffffff169091209392505050565b3b151590565b600054610100900460ff1680620016d75750620016d762001147565b80620016e6575060005460ff16155b6200173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff16158015620017a457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b620017ae620019b8565b620017b862001ad2565b8015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b1580156200185757600080fd5b505afa1580156200186c573d6000803e3d6000fd5b505050506040513d60208110156200188357600080fd5b5051905090565b60608060006200189a8462001c6c565b915050620018a88562001d44565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b8151600090602084016200198764ffffffffff8516828462001da6565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600054610100900460ff1680620019d45750620019d462001147565b80620019e3575060005460ff16155b62001a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff16158015620017b857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001aee575062001aee62001147565b8062001afd575060005460ff16155b62001b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620024ab602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bbb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001bc762000f57565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015620017e857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080601f5b600f8160ff16111562001cd95760ff600882021684901c62001c948162001e03565b61ffff16841793508160ff1660101462001cb057601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c72565b50600f5b60ff8160ff16101562000da85760ff600882021684901c62001cff8162001e03565b61ffff16831792508160ff1660001462001d1b57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001cdd565b60006030815b600a8160ff16101562001d9f5760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d9357fe5b04935060010162001d4a565b5050919050565b60008062001db5848462001e37565b905060405181111562001dc6575060005b8062001df6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050620005fb565b6200198785858562001eaa565b600062001e1760048360ff16901c62001ebd565b60ff161760081b62ffff001662001e2e8262001ebd565b60ff1617919050565b818101828110156200078d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f8416918290811062001f0557fe5b016020015160f81c9392505050565b6105628062001f238339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a",
    "sourceMap": "1827:14420:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2278:74;;;;;;;;;;;;;;;;-1:-1:-1;2278:74:38;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;7400:535;;;;;;;;;;;;;;;;-1:-1:-1;7400:535:38;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2507:60;;;;;;;;;;;;;;;;-1:-1:-1;2507:60:38;;:::i;6678:302::-;;;;;;;;;;;;;;;;-1:-1:-1;6678:302:38;;;;;;;;;;;;;;;;:::i;:::-;;10696:276;;;;;;;;;;;;;;;;-1:-1:-1;10696:276:38;;;;;;;;;:::i;504:50:80:-;;;:::i;1353:191::-;;;;;;;;;;;;;;;;-1:-1:-1;1353:191:80;;;;:::i;3228:223:38:-;;;;;;;;;;;;;;;;-1:-1:-1;3228:223:38;;;;;;;;;;;:::i;9975:435::-;;;;;;;;;;;;;;;;-1:-1:-1;9975:435:38;;;;;;;;;:::i;16161:84::-;;;:::i;1335:85:7:-;;;:::i;5207:390:38:-;;;;;;;;;;;;;;;;-1:-1:-1;5207:390:38;;;;;;;;;:::i;3831:323::-;;;;;;;;;;;;;;;;-1:-1:-1;3831:323:38;;;;:::i;11099:733::-;;;;;;;;;;;;;;;;-1:-1:-1;11099:733:38;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2192:26;;;:::i;9272:204::-;;;;;;;;;;;;;;;;-1:-1:-1;9272:204:38;;;;;;;;;;;:::i;4454:321::-;;;;;;;;;;;;;;;;-1:-1:-1;4454:321:38;;;;;;;;;:::i;8303:470::-;;;;;;;;;;;;;;;;-1:-1:-1;8303:470:38;;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;2278:74:38:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7400:535::-;7662:57;;;7512:20;7662:57;;;:25;:57;;;;;;;;7622:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;7729:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7874:54;7899:8;:15;;;7916:8;:11;;;7874:24;:54::i;:::-;7859:69;7400:535;-1:-1:-1;;;7400:535:38:o;2507:60::-;;;;;;;;;;;;;;;:::o;6678:302::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6859:52:38::1;6889:7;6898:3;6903:7;6859:29;:52::i;:::-;6921;6951:7;6960:3;6965:7;6921:29;:52::i;:::-;6678:302:::0;;;:::o;10696:276::-;10817:6;10839:14;10856:29;10872:7;10881:3;10856:15;:29::i;:::-;10839:46;-1:-1:-1;10903:20:38;;;10895:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10958:6;-1:-1:-1;10696:276:38;;;;;:::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;3228:223:38:-;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;3351:11:38::1;:26:::0;;;::::1;;::::0;::::1;;::::0;;3387:57:::1;3421:22:::0;3387:33:::1;:57::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;3228:223:38;;;:::o;9975:435::-;10091:14;10136;:12;:14::i;:::-;10125:25;;:7;:25;;;10121:283;;;10215:31;10242:3;10215:26;:31::i;:::-;10206:40;;10121:283;;;10355:38;10380:7;10389:3;10355:24;:38::i;16161:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16161:84:38:o;1335:85:7:-;1407:6;;;;1335:85;:::o;5207:390:38:-;5331:14;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5370:29:38::1;5386:7;5395:3;5370:15;:29::i;:::-;5361:38:::0;-1:-1:-1;5413:20:38::1;::::0;::::1;5409:182;;5554:26;5567:7;5576:3;5554:12;:26::i;3831:323::-:0;4017:64;;3932:14;4017:64;;;:25;:64;;;;;;;;;3975:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;3831:323::o;11099:733::-;11378:33;;;11202:4;11378:33;;;:25;:33;;;;;:40;;;:45;11374:88;;-1:-1:-1;11446:5:38;11439:12;;11374:88;-1:-1:-1;11766:19:38;;11811:14;;11099:733;;;;:::o;2192:26::-;;;;;;:::o;9272:204::-;9373:14;9412:57;9428:7;9437:31;9464:3;9437:26;:31::i;:::-;9412:15;:57::i;4454:321::-;4562:23;4601:16;4620:41;4648:7;4657:3;4620:27;:41::i;:::-;4601:60;-1:-1:-1;4671:15:38;4689:17;:15;;;;:17::i;:::-;4734:34;;;;:25;:34;;;;;;;;;4454:321;-1:-1:-1;;;;;4454:321:38:o;8303:470::-;8486:55;;;8403:14;8486:55;;;:25;:55;;;;;;;;8446:95;;;;;;;;;;;;;;;;;;;;;;;;;;;8403:14;;8551:216;;8601:14;:12;:14::i;:::-;8591:24;;8635:34;8662:6;8635:26;:34::i;:::-;8629:40;;8551:216;;;8710:15;;8745:11;;;;8710:15;;-1:-1:-1;8745:11:38;-1:-1:-1;8551:216:38;8303:470;;;;:::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;828:104:18:-;915:10;828:104;:::o;12157:316:38:-;12307:12;;;12299:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12346:42;;;;;;:25;:42;;;;;:59;;;;;;;;;;;;;;;-1:-1:-1;12415:45:38;;;:51;12157:316::o;12750:378::-;12900:29;;;12892:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12954:16;12973:41;13001:7;13010:3;12973:27;:41::i;:::-;12954:60;-1:-1:-1;13024:15:38;13042:17;:15;;;;:17::i;:::-;13069:34;;;;:25;:34;;;;;:52;;;;;;;;;;;;;;;;-1:-1:-1;;;;12750:378:38: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;15787:181:38:-;15897:6;15926:35;:33;:35::i;:::-;15919:42;;15787:181;:::o;1167:127:75:-;1280:4;1167:127::o;13355:1067:38:-;13562:11;;13539:39;;13440:14;;13562:11;;;13539:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13522:57;;13810:6;13797:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13888:19;13909:21;13934:63;13963:7;13984:3;13934:15;:63::i;:::-;13887:110;;;;14020:6;14007:31;;;14039:5;14046:7;14055:2;14007:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14007:51:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14127:6;14114:38;;;14153:7;:5;:7::i;:::-;14114:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14206:51;14236:7;14245:3;14250:6;14206:29;:51::i;:::-;14267;14297:7;14306:3;14311:6;14267:29;:51::i;:::-;14408:6;14380:35;;14403:3;14394:7;14380:35;;;;;;;;;;;;13355:1067;;;;;;:::o;999:129:75:-;1097:23;;;999:129::o;7247:193:33:-;7346:7;7376:57;7418:13;7376:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;:57::i;21799:298:32:-;21855:14;21881:12;21896;21900:7;21896:3;:12::i;:::-;21881:27;;;;21918:12;21933;21937:7;21933:3;:12::i;:::-;21918:27;;22060:21;;;;21964:127;-1:-1:-1;;;21964:127:32:o;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;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;14832:758:38:-;14933:19;;15051:21;15076:32;15103:3;15076:18;:32::i;:::-;15048:60;;;15261:31;15284:7;15261:22;:31::i;:::-;15227:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15468:22;;;;;;;;;15227:155;;-1:-1:-1;15227:155:38;;15468:22;;15227:155;;15468:22;;;;;-1:-1:-1;15468:22:38;15458:32;;15567:4;15560:5;15556:16;15550:23;15543:4;15534:7;15530:18;15523:51;15509:75;;;;;;:::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;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::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;1175:614:37:-;1257:18;;1327:2;1312:211;1335:2;1331:1;:6;;;1312:211;;;1378:17;1393:1;1389:5;;1378:17;;;;1424:12;1378:17;1424:8;:12::i;:::-;1410:26;;;;;;1454:1;:7;;1459:2;1454:7;1450:63;;1496:2;1481:17;;;;;1450:63;-1:-1:-1;1339:6:37;;1312:211;;;-1:-1:-1;1585:2:37;1570:213;1593:3;1589:1;:7;;;1570:213;;;1637:17;1652:1;1648:5;;1637:17;;;;1684:12;1637:17;1684:8;:12::i;:::-;1669:27;;;;;;1714:1;:6;;1719:1;1714:6;1710:63;;1756:2;1740:18;;;;;1710:63;-1:-1:-1;1598:6:37;;1570:213;;489:390;572:15;620:4;572:15;738:135;760:2;756:1;:6;;;738:135;;;798:34;830:1;826:5;;798:34;813:7;807:2;800:9;;;;799:21;;;798:34;;;;786:46;;;;860:2;853:4;:9;;;;;;;;;-1:-1:-1;769:1:37;764:6;738:135;;;;489:390;;;;:::o;12397:443:32:-;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;2333:214:37:-;2386:15;2425:22;2445:1;2436:5;:10;;;;2425;:22::i;:::-;2413:34;;;2484:1;2471:14;;;2507:17;2518:5;2507:10;:17::i;:::-;2495:29;;;;2333:214;-1:-1:-1;2333:214:37: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;1986:186:37:-;2142:13;;;;;;;;;;;;;;;;;;2041:11;;2088:4;2080:12;;;;;2142:22;;;;;;;;;;;;;1986:186;-1:-1:-1;;;1986:186:37:o;-1:-1:-1:-;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "canonicalToRepresentation(bytes32)": "1ecf6f9f",
    "enrollCustom(uint32,bytes32,address)": "28b1aea0",
    "ensureLocalToken(uint32,bytes32)": "b869d89a",
    "getCanonicalTokenId(address)": "b9730eaf",
    "getLocalAddress(uint32,address)": "d82d0531",
    "getLocalAddress(uint32,bytes32)": "589b3c64",
    "getRepresentationAddress(uint32,bytes32)": "dc9685a7",
    "getTokenId(address)": "f1537686",
    "initialize(address,address)": "485cc955",
    "isLocalOrigin(address)": "c86415cb",
    "mustHaveLocalToken(uint32,bytes32)": "2c3da59c",
    "oldReprToCurrentRepr(address)": "0e71e251",
    "owner()": "8da5cb5b",
    "renounceOwnership()": "715018a6",
    "representationToCanonical(address)": "03e418c2",
    "setXAppConnectionManager(address)": "41bdc8b5",
    "tokenBeacon()": "ccf5a77c",
    "transferOwnership(address)": "f2fde38b",
    "xAppConnectionManager()": "3339df96"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/TokenRegistry.sol",
    "id": 32604,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "Encoding": [
        31983
      ],
      "IBridgeToken": [
        33609
      ],
      "IERC20": [
        27517
      ],
      "ITokenRegistry": [
        33703
      ],
      "Initializable": [
        23676
      ],
      "TokenRegistry": [
        32603
      ],
      "TypeCasts": [
        46345
      ],
      "TypedMemView": [
        29602
      ],
      "UpgradeBeaconProxy": [
        46642
      ],
      "XAppConnectionClient": [
        46866
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:16202:38",
    "nodes": [
      {
        "id": 31985,
        "nodeType": "PragmaDirective",
        "src": "46:22:38",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 31987,
        "nodeType": "ImportDirective",
        "src": "115:50:38",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "./BridgeMessage.sol",
        "scope": 32604,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31986,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "123:13:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31989,
        "nodeType": "ImportDirective",
        "src": "166:40:38",
        "absolutePath": "packages/contracts-bridge/contracts/Encoding.sol",
        "file": "./Encoding.sol",
        "scope": 32604,
        "sourceUnit": 31984,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31988,
              "name": "Encoding",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "174:8:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31991,
        "nodeType": "ImportDirective",
        "src": "247:70:38",
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "scope": 32604,
        "sourceUnit": 27518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31990,
              "name": "IERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "255:6:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31993,
        "nodeType": "ImportDirective",
        "src": "318:59:38",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/IBridgeToken.sol",
        "file": "./interfaces/IBridgeToken.sol",
        "scope": 32604,
        "sourceUnit": 33610,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31992,
              "name": "IBridgeToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "326:12:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31995,
        "nodeType": "ImportDirective",
        "src": "378:63:38",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/ITokenRegistry.sol",
        "file": "./interfaces/ITokenRegistry.sol",
        "scope": 32604,
        "sourceUnit": 33704,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31994,
              "name": "ITokenRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "386:14:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31997,
        "nodeType": "ImportDirective",
        "src": "490:100:38",
        "absolutePath": "packages/contracts-router/contracts/XAppConnectionClient.sol",
        "file": "@nomad-xyz/contracts-router/contracts/XAppConnectionClient.sol",
        "scope": 32604,
        "sourceUnit": 46867,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31996,
              "name": "XAppConnectionClient",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "498:20:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31999,
        "nodeType": "ImportDirective",
        "src": "591:88:38",
        "absolutePath": "packages/contracts-core/contracts/XAppConnectionManager.sol",
        "file": "@nomad-xyz/contracts-core/contracts/XAppConnectionManager.sol",
        "scope": 32604,
        "sourceUnit": 45021,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31998,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "599:9:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32001,
        "nodeType": "ImportDirective",
        "src": "680:102:38",
        "absolutePath": "packages/contracts-core/contracts/upgrade/UpgradeBeaconProxy.sol",
        "file": "@nomad-xyz/contracts-core/contracts/upgrade/UpgradeBeaconProxy.sol",
        "scope": 32604,
        "sourceUnit": 46643,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32000,
              "name": "UpgradeBeaconProxy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "688:18:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32003,
        "nodeType": "ImportDirective",
        "src": "783:78:38",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 32604,
        "sourceUnit": 29603,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32002,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "791:12:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32005,
        "nodeType": "ImportDirective",
        "src": "862:90:38",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol",
        "scope": 32604,
        "sourceUnit": 23677,
        "symbolAliases": [
          {
            "foreign": {
              "id": 32004,
              "name": "Initializable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "870:13:38",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 32603,
        "nodeType": "ContractDefinition",
        "src": "1827:14420:38",
        "nodes": [
          {
            "id": 32015,
            "nodeType": "UsingForDirective",
            "src": "1955:29:38",
            "libraryName": {
              "id": 32013,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "1961:12:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 32014,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "1978:5:38",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 32018,
            "nodeType": "UsingForDirective",
            "src": "1989:31:38",
            "libraryName": {
              "id": 32016,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "1995:12:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 32017,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "2012:7:38",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 32021,
            "nodeType": "UsingForDirective",
            "src": "2025:32:38",
            "libraryName": {
              "id": 32019,
              "name": "BridgeMessage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30301,
              "src": "2031:13:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeMessage_$30301",
                "typeString": "library BridgeMessage"
              }
            },
            "typeName": {
              "id": 32020,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "2049:7:38",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 32023,
            "nodeType": "VariableDeclaration",
            "src": "2192:26:38",
            "constant": false,
            "functionSelector": "ccf5a77c",
            "mutability": "mutable",
            "name": "tokenBeacon",
            "scope": 32603,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 32022,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "2192:7:38",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "id": 32027,
            "nodeType": "VariableDeclaration",
            "src": "2278:74:38",
            "constant": false,
            "functionSelector": "03e418c2",
            "mutability": "mutable",
            "name": "representationToCanonical",
            "scope": 32603,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
              "typeString": "mapping(address => struct BridgeMessage.TokenId)"
            },
            "typeName": {
              "id": 32026,
              "keyType": {
                "id": 32024,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2286:7:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2278:41:38",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                "typeString": "mapping(address => struct BridgeMessage.TokenId)"
              },
              "valueType": {
                "id": 32025,
                "name": "BridgeMessage.TokenId",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 29625,
                "src": "2297:21:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_TokenId_$29625_storage_ptr",
                  "typeString": "struct BridgeMessage.TokenId"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32031,
            "nodeType": "VariableDeclaration",
            "src": "2507:60:38",
            "constant": false,
            "functionSelector": "1ecf6f9f",
            "mutability": "mutable",
            "name": "canonicalToRepresentation",
            "scope": 32603,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 32030,
              "keyType": {
                "id": 32028,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "2515:7:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "2507:27:38",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 32029,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2526:7:38",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 32035,
            "nodeType": "VariableDeclaration",
            "src": "2650:25:38",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 32603,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 32032,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2650:7:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 32034,
              "length": {
                "hexValue": "3439",
                "id": 32033,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "2658:2:38",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "2650:11:38",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 32044,
            "nodeType": "EventDefinition",
            "src": "3058:125:38",
            "anonymous": false,
            "documentation": {
              "id": 32036,
              "nodeType": "StructuredDocumentation",
              "src": "2723:330:38",
              "text": " @notice emitted when a representation token contract is deployed\n @param domain the domain of the chain where the canonical asset is deployed\n @param id the bytes32 address of the canonical token contract\n @param representation the address of the newly locally deployed representation contract"
            },
            "name": "TokenDeployed",
            "parameters": {
              "id": 32043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32038,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32044,
                  "src": "3087:21:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32037,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3087:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32040,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32044,
                  "src": "3118:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32039,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3118:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32042,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "representation",
                  "nodeType": "VariableDeclaration",
                  "scope": 32044,
                  "src": "3146:30:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32041,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3146:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3077:105:38"
            }
          },
          {
            "id": 32062,
            "nodeType": "FunctionDefinition",
            "src": "3228:223:38",
            "body": {
              "id": 32061,
              "nodeType": "Block",
              "src": "3341:110:38",
              "statements": [
                {
                  "expression": {
                    "id": 32055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32053,
                      "name": "tokenBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32023,
                      "src": "3351:11:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32054,
                      "name": "_tokenBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32046,
                      "src": "3365:12:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3351:26:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32056,
                  "nodeType": "ExpressionStatement",
                  "src": "3351:26:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32058,
                        "name": "_xAppConnectionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32048,
                        "src": "3421:22:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32057,
                      "name": "__XAppConnectionClient_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 46814,
                      "src": "3387:33:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 32059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3387:57:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32060,
                  "nodeType": "ExpressionStatement",
                  "src": "3387:57:38"
                }
              ]
            },
            "functionSelector": "485cc955",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 32051,
                "modifierName": {
                  "id": 32050,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "3325:11:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3325:11:38"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 32049,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32046,
                  "mutability": "mutable",
                  "name": "_tokenBeacon",
                  "nodeType": "VariableDeclaration",
                  "scope": 32062,
                  "src": "3248:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32045,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3248:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32048,
                  "mutability": "mutable",
                  "name": "_xAppConnectionManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 32062,
                  "src": "3270:30:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32047,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3270:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3247:54:38"
            },
            "returnParameters": {
              "id": 32052,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3341:0:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32091,
            "nodeType": "FunctionDefinition",
            "src": "3831:323:38",
            "body": {
              "id": 32090,
              "nodeType": "Block",
              "src": "3965:189:38",
              "statements": [
                {
                  "assignments": [
                    32075
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32075,
                      "mutability": "mutable",
                      "name": "_canonical",
                      "nodeType": "VariableDeclaration",
                      "scope": 32090,
                      "src": "3975:39:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                        "typeString": "struct BridgeMessage.TokenId"
                      },
                      "typeName": {
                        "id": 32074,
                        "name": "BridgeMessage.TokenId",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 29625,
                        "src": "3975:21:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_storage_ptr",
                          "typeString": "struct BridgeMessage.TokenId"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32079,
                  "initialValue": {
                    "baseExpression": {
                      "id": 32076,
                      "name": "representationToCanonical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32027,
                      "src": "4017:25:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                        "typeString": "mapping(address => struct BridgeMessage.TokenId storage ref)"
                      }
                    },
                    "id": 32078,
                    "indexExpression": {
                      "id": 32077,
                      "name": "_representation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32065,
                      "src": "4056:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4017:64:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenId_$29625_storage",
                      "typeString": "struct BridgeMessage.TokenId storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3975:106:38"
                },
                {
                  "expression": {
                    "id": 32083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32080,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32068,
                      "src": "4091:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 32081,
                        "name": "_canonical",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32075,
                        "src": "4101:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                          "typeString": "struct BridgeMessage.TokenId memory"
                        }
                      },
                      "id": 32082,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "domain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29622,
                      "src": "4101:17:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "4091:27:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 32084,
                  "nodeType": "ExpressionStatement",
                  "src": "4091:27:38"
                },
                {
                  "expression": {
                    "id": 32088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32085,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32070,
                      "src": "4128:3:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 32086,
                        "name": "_canonical",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32075,
                        "src": "4134:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                          "typeString": "struct BridgeMessage.TokenId memory"
                        }
                      },
                      "id": 32087,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29624,
                      "src": "4134:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4128:19:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 32089,
                  "nodeType": "ExpressionStatement",
                  "src": "4128:19:38"
                }
              ]
            },
            "documentation": {
              "id": 32063,
              "nodeType": "StructuredDocumentation",
              "src": "3535:291:38",
              "text": " @notice Look up the canonical token ID for a representation token\n @param _representation the address of the representation contract\n @return _domain the domain of the canonical version.\n @return _id the identifier of the canonical version in its domain."
            },
            "functionSelector": "b9730eaf",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCanonicalTokenId",
            "parameters": {
              "id": 32066,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32065,
                  "mutability": "mutable",
                  "name": "_representation",
                  "nodeType": "VariableDeclaration",
                  "scope": 32091,
                  "src": "3860:23:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32064,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3860:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3859:25:38"
            },
            "returnParameters": {
              "id": 32071,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32068,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32091,
                  "src": "3932:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32067,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3932:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32070,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32091,
                  "src": "3948:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32069,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3948:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3931:29:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32122,
            "nodeType": "FunctionDefinition",
            "src": "4454:321:38",
            "body": {
              "id": 32121,
              "nodeType": "Block",
              "src": "4591:184:38",
              "statements": [
                {
                  "assignments": [
                    32102
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32102,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 32121,
                      "src": "4601:16:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 32101,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "4601:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32108,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 32105,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32094,
                        "src": "4648:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32106,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32096,
                        "src": "4657:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 32103,
                        "name": "BridgeMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30301,
                        "src": "4620:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                          "typeString": "type(library BridgeMessage)"
                        }
                      },
                      "id": 32104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatTokenId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29928,
                      "src": "4620:27:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$returns$_t_bytes29_$",
                        "typeString": "function (uint32,bytes32) pure returns (bytes29)"
                      }
                    },
                    "id": 32107,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4620:41:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4601:60:38"
                },
                {
                  "assignments": [
                    32110
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32110,
                      "mutability": "mutable",
                      "name": "_idHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 32121,
                      "src": "4671:15:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 32109,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4671:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32114,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 32111,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32102,
                        "src": "4689:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 32112,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29220,
                      "src": "4689:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes32)"
                      }
                    },
                    "id": 32113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4689:17:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4671:35:38"
                },
                {
                  "expression": {
                    "id": 32119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32115,
                      "name": "_representation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32099,
                      "src": "4716:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 32116,
                        "name": "canonicalToRepresentation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32031,
                        "src": "4734:25:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 32118,
                      "indexExpression": {
                        "id": 32117,
                        "name": "_idHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32110,
                        "src": "4760:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4734:34:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4716:52:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32120,
                  "nodeType": "ExpressionStatement",
                  "src": "4716:52:38"
                }
              ]
            },
            "documentation": {
              "id": 32092,
              "nodeType": "StructuredDocumentation",
              "src": "4160:289:38",
              "text": " @notice Look up the representation address for a canonical token\n @param _domain the domain of the canonical version.\n @param _id the identifier of the canonical version in its domain.\n @return _representation the address of the representation contract"
            },
            "functionSelector": "dc9685a7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRepresentationAddress",
            "parameters": {
              "id": 32097,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32094,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32122,
                  "src": "4488:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32093,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4488:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32096,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32122,
                  "src": "4504:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32095,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4504:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4487:29:38"
            },
            "returnParameters": {
              "id": 32100,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32099,
                  "mutability": "mutable",
                  "name": "_representation",
                  "nodeType": "VariableDeclaration",
                  "scope": 32122,
                  "src": "4562:23:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4562:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4561:25:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32158,
            "nodeType": "FunctionDefinition",
            "src": "5207:390:38",
            "body": {
              "id": 32157,
              "nodeType": "Block",
              "src": "5351:246:38",
              "statements": [
                {
                  "expression": {
                    "id": 32140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32135,
                      "name": "_local",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32133,
                      "src": "5361:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 32137,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32125,
                          "src": "5386:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "id": 32138,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32127,
                          "src": "5395:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 32136,
                        "name": "getLocalAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32322,
                        "src": "5370:15:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (uint32,bytes32) view returns (address)"
                        }
                      },
                      "id": 32139,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5370:29:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5361:38:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32141,
                  "nodeType": "ExpressionStatement",
                  "src": "5361:38:38"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 32147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 32142,
                      "name": "_local",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32133,
                      "src": "5413:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 32145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5431:1:38",
                          "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": 32144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5423:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 32143,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5423:7:38",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 32146,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5423:10:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5413:20:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 32156,
                  "nodeType": "IfStatement",
                  "src": "5409:182:38",
                  "trueBody": {
                    "id": 32155,
                    "nodeType": "Block",
                    "src": "5435:156:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 32153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32148,
                            "name": "_local",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32133,
                            "src": "5545:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 32150,
                                "name": "_domain",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32125,
                                "src": "5567:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "id": 32151,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32127,
                                "src": "5576:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 32149,
                              "name": "_deployToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32528,
                              "src": "5554:12:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (uint32,bytes32) returns (address)"
                              }
                            },
                            "id": 32152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5554:26:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5545:35:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 32154,
                        "nodeType": "ExpressionStatement",
                        "src": "5545:35:38"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              33659
            ],
            "documentation": {
              "id": 32123,
              "nodeType": "StructuredDocumentation",
              "src": "4850:352:38",
              "text": " @notice Get the address of the local token for the provided tokenId;\n if the token is remote and no local representation exists, deploy the representation contract\n @param _domain the token's native domain\n @param _id the token's id on its native domain\n @return _local the address of the local token contract"
            },
            "functionSelector": "b869d89a",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 32131,
                "modifierName": {
                  "id": 32130,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "5304:9:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5304:9:38"
              }
            ],
            "name": "ensureLocalToken",
            "overrides": {
              "id": 32129,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5287:8:38"
            },
            "parameters": {
              "id": 32128,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32125,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32158,
                  "src": "5233:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32124,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5233:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32127,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32158,
                  "src": "5249:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32126,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5249:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5232:29:38"
            },
            "returnParameters": {
              "id": 32134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32133,
                  "mutability": "mutable",
                  "name": "_local",
                  "nodeType": "VariableDeclaration",
                  "scope": 32158,
                  "src": "5331:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32132,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5331:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5330:16:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32184,
            "nodeType": "FunctionDefinition",
            "src": "6678:302:38",
            "body": {
              "id": 32183,
              "nodeType": "Block",
              "src": "6804:176:38",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32172,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32161,
                        "src": "6889:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32173,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32163,
                        "src": "6898:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 32174,
                        "name": "_custom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32165,
                        "src": "6903:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32171,
                      "name": "_setRepresentationToCanonical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32415,
                      "src": "6859:29:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,bytes32,address)"
                      }
                    },
                    "id": 32175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6859:52:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32176,
                  "nodeType": "ExpressionStatement",
                  "src": "6859:52:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32178,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32161,
                        "src": "6951:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32179,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32163,
                        "src": "6960:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 32180,
                        "name": "_custom",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32165,
                        "src": "6965:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32177,
                      "name": "_setCanonicalToRepresentation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32456,
                      "src": "6921:29:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,bytes32,address)"
                      }
                    },
                    "id": 32181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6921:52:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32182,
                  "nodeType": "ExpressionStatement",
                  "src": "6921:52:38"
                }
              ]
            },
            "baseFunctions": [
              33695
            ],
            "documentation": {
              "id": 32159,
              "nodeType": "StructuredDocumentation",
              "src": "5672:1001:38",
              "text": " @notice Enroll a custom token. This allows projects to work with\n governance to specify a custom representation.\n @dev This is done by inserting the custom representation into the token\n lookup tables. It is permissioned to the owner (governance) and can\n potentially break token representations. It must be used with extreme\n caution.\n After the token is inserted, new mint instructions will be sent to the\n custom token. The default representation (and old custom representations)\n may still be burnt. Until all users have explicitly called migrate, both\n representations will continue to exist.\n The custom representation MUST be trusted, and MUST allow the router to\n both mint AND burn tokens at will.\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": 32169,
                "modifierName": {
                  "id": 32168,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "6794:9:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6794:9:38"
              }
            ],
            "name": "enrollCustom",
            "overrides": {
              "id": 32167,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6785:8:38"
            },
            "parameters": {
              "id": 32166,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32161,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32184,
                  "src": "6709:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32160,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6709:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32163,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32184,
                  "src": "6733:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32162,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6733:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32165,
                  "mutability": "mutable",
                  "name": "_custom",
                  "nodeType": "VariableDeclaration",
                  "scope": 32184,
                  "src": "6754:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6754:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6699:76:38"
            },
            "returnParameters": {
              "id": 32170,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6804:0:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32219,
            "nodeType": "FunctionDefinition",
            "src": "7400:535:38",
            "body": {
              "id": 32218,
              "nodeType": "Block",
              "src": "7538:397:38",
              "statements": [
                {
                  "assignments": [
                    32196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32196,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 32218,
                      "src": "7622:37:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                        "typeString": "struct BridgeMessage.TokenId"
                      },
                      "typeName": {
                        "id": 32195,
                        "name": "BridgeMessage.TokenId",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 29625,
                        "src": "7622:21:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_storage_ptr",
                          "typeString": "struct BridgeMessage.TokenId"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32200,
                  "initialValue": {
                    "baseExpression": {
                      "id": 32197,
                      "name": "representationToCanonical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32027,
                      "src": "7662:25:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                        "typeString": "mapping(address => struct BridgeMessage.TokenId storage ref)"
                      }
                    },
                    "id": 32199,
                    "indexExpression": {
                      "id": 32198,
                      "name": "_oldRepr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32187,
                      "src": "7701:8:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7662:57:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenId_$29625_storage",
                      "typeString": "struct BridgeMessage.TokenId storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7622:97:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 32205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 32202,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32196,
                            "src": "7737:8:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                              "typeString": "struct BridgeMessage.TokenId memory"
                            }
                          },
                          "id": 32203,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "domain",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29622,
                          "src": "7737:15:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 32204,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7756:1:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7737:20:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "2172657072",
                        "id": 32206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7759:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fecadb82e883cce3bb2e35228624d6026eae1d49984cab43e23ead6768471654",
                          "typeString": "literal_string \"!repr\""
                        },
                        "value": "!repr"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fecadb82e883cce3bb2e35228624d6026eae1d49984cab43e23ead6768471654",
                          "typeString": "literal_string \"!repr\""
                        }
                      ],
                      "id": 32201,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7729:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7729:38:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32208,
                  "nodeType": "ExpressionStatement",
                  "src": "7729:38:38"
                },
                {
                  "expression": {
                    "id": 32216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32209,
                      "name": "_currentRepr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32191,
                      "src": "7859:12:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 32211,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32196,
                            "src": "7899:8:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                              "typeString": "struct BridgeMessage.TokenId memory"
                            }
                          },
                          "id": 32212,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "domain",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29622,
                          "src": "7899:15:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "expression": {
                            "id": 32213,
                            "name": "_tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32196,
                            "src": "7916:8:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                              "typeString": "struct BridgeMessage.TokenId memory"
                            }
                          },
                          "id": 32214,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 29624,
                          "src": "7916:11:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 32210,
                        "name": "getRepresentationAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32122,
                        "src": "7874:24:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (uint32,bytes32) view returns (address)"
                        }
                      },
                      "id": 32215,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7874:54:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7859:69:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32217,
                  "nodeType": "ExpressionStatement",
                  "src": "7859:69:38"
                }
              ]
            },
            "baseFunctions": [
              33702
            ],
            "documentation": {
              "id": 32185,
              "nodeType": "StructuredDocumentation",
              "src": "7045:350:38",
              "text": " @notice Returns the current representation contract\n for the same canonical token as the old representation contract\n @dev If _oldRepr is not a representation, this will error.\n @param _oldRepr The address of the old representation token\n @return _currentRepr The address of the current representation token"
            },
            "functionSelector": "0e71e251",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "oldReprToCurrentRepr",
            "overrides": {
              "id": 32189,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7486:8:38"
            },
            "parameters": {
              "id": 32188,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32187,
                  "mutability": "mutable",
                  "name": "_oldRepr",
                  "nodeType": "VariableDeclaration",
                  "scope": 32219,
                  "src": "7430:16:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32186,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7430:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7429:18:38"
            },
            "returnParameters": {
              "id": 32192,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32191,
                  "mutability": "mutable",
                  "name": "_currentRepr",
                  "nodeType": "VariableDeclaration",
                  "scope": 32219,
                  "src": "7512:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7512:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7511:22:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32268,
            "nodeType": "FunctionDefinition",
            "src": "8303:470:38",
            "body": {
              "id": 32267,
              "nodeType": "Block",
              "src": "8436:337:38",
              "statements": [
                {
                  "assignments": [
                    32233
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32233,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 32267,
                      "src": "8446:37:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                        "typeString": "struct BridgeMessage.TokenId"
                      },
                      "typeName": {
                        "id": 32232,
                        "name": "BridgeMessage.TokenId",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 29625,
                        "src": "8446:21:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_storage_ptr",
                          "typeString": "struct BridgeMessage.TokenId"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32237,
                  "initialValue": {
                    "baseExpression": {
                      "id": 32234,
                      "name": "representationToCanonical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32027,
                      "src": "8486:25:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                        "typeString": "mapping(address => struct BridgeMessage.TokenId storage ref)"
                      }
                    },
                    "id": 32236,
                    "indexExpression": {
                      "id": 32235,
                      "name": "_local",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32222,
                      "src": "8525:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8486:55:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_TokenId_$29625_storage",
                      "typeString": "struct BridgeMessage.TokenId storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8446:95:38"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 32241,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 32238,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32233,
                        "src": "8555:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                          "typeString": "struct BridgeMessage.TokenId memory"
                        }
                      },
                      "id": 32239,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "domain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29622,
                      "src": "8555:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 32240,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8574:1:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8555:20:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 32265,
                    "nodeType": "Block",
                    "src": "8686:81:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 32258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32255,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32226,
                            "src": "8700:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 32256,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32233,
                              "src": "8710:8:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                                "typeString": "struct BridgeMessage.TokenId memory"
                              }
                            },
                            "id": 32257,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "domain",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29622,
                            "src": "8710:15:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "8700:25:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 32259,
                        "nodeType": "ExpressionStatement",
                        "src": "8700:25:38"
                      },
                      {
                        "expression": {
                          "id": 32263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32260,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32228,
                            "src": "8739:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 32261,
                              "name": "_tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32233,
                              "src": "8745:8:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_TokenId_$29625_memory_ptr",
                                "typeString": "struct BridgeMessage.TokenId memory"
                              }
                            },
                            "id": 32262,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 29624,
                            "src": "8745:11:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8739:17:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 32264,
                        "nodeType": "ExpressionStatement",
                        "src": "8739:17:38"
                      }
                    ]
                  },
                  "id": 32266,
                  "nodeType": "IfStatement",
                  "src": "8551:216:38",
                  "trueBody": {
                    "id": 32254,
                    "nodeType": "Block",
                    "src": "8577:103:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 32245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32242,
                            "name": "_domain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32226,
                            "src": "8591:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 32243,
                              "name": "_localDomain",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                32594
                              ],
                              "referencedDeclaration": 32594,
                              "src": "8601:12:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                                "typeString": "function () view returns (uint32)"
                              }
                            },
                            "id": 32244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8601:14:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "8591:24:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "id": 32246,
                        "nodeType": "ExpressionStatement",
                        "src": "8591:24:38"
                      },
                      {
                        "expression": {
                          "id": 32252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32247,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32228,
                            "src": "8629:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 32250,
                                "name": "_local",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32222,
                                "src": "8662:6:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "id": 32248,
                                "name": "TypeCasts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 46345,
                                "src": "8635:9:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                                  "typeString": "type(library TypeCasts)"
                                }
                              },
                              "id": 32249,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addressToBytes32",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46325,
                              "src": "8635:26:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 32251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8635:34:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8629:40:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 32253,
                        "nodeType": "ExpressionStatement",
                        "src": "8629:40:38"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              33686
            ],
            "documentation": {
              "id": 32220,
              "nodeType": "StructuredDocumentation",
              "src": "8045:253:38",
              "text": " @notice Return tokenId for a local token address\n @param _local the local address of the token contract (representation or canonical)\n @return _domain canonical domain\n @return _id canonical identifier on that domain"
            },
            "functionSelector": "f1537686",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTokenId",
            "overrides": {
              "id": 32224,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8377:8:38"
            },
            "parameters": {
              "id": 32223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32222,
                  "mutability": "mutable",
                  "name": "_local",
                  "nodeType": "VariableDeclaration",
                  "scope": 32268,
                  "src": "8323:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32221,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8323:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8322:16:38"
            },
            "returnParameters": {
              "id": 32229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32226,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32268,
                  "src": "8403:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32225,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8403:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32228,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32268,
                  "src": "8419:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32227,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8419:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8402:29:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32289,
            "nodeType": "FunctionDefinition",
            "src": "9272:204:38",
            "body": {
              "id": 32288,
              "nodeType": "Block",
              "src": "9393:83:38",
              "statements": [
                {
                  "expression": {
                    "id": 32286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32278,
                      "name": "_local",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32276,
                      "src": "9403:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 32280,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32271,
                          "src": "9428:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 32283,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32273,
                              "src": "9464:3:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 32281,
                              "name": "TypeCasts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 46345,
                              "src": "9437:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                                "typeString": "type(library TypeCasts)"
                              }
                            },
                            "id": 32282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addressToBytes32",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 46325,
                            "src": "9437:26:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) pure returns (bytes32)"
                            }
                          },
                          "id": 32284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9437:31:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 32279,
                        "name": "getLocalAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32322,
                        "src": "9412:15:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (uint32,bytes32) view returns (address)"
                        }
                      },
                      "id": 32285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9412:57:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9403:66:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32287,
                  "nodeType": "ExpressionStatement",
                  "src": "9403:66:38"
                }
              ]
            },
            "documentation": {
              "id": 32269,
              "nodeType": "StructuredDocumentation",
              "src": "8779:488:38",
              "text": " @notice Looks up the local address corresponding to a domain/id pair.\n @dev If the token is local, it will return the local address.\n If the token is non-local and no local representation exists, this\n will return `address(0)`.\n @param _domain the domain of the canonical version.\n @param _id the identifier of the canonical version in its domain.\n @return _local the local address of the token contract (representation or canonical)"
            },
            "functionSelector": "d82d0531",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLocalAddress",
            "parameters": {
              "id": 32274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32271,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32289,
                  "src": "9297:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32270,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9297:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32273,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32289,
                  "src": "9313:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9313:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9296:29:38"
            },
            "returnParameters": {
              "id": 32277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32276,
                  "mutability": "mutable",
                  "name": "_local",
                  "nodeType": "VariableDeclaration",
                  "scope": 32289,
                  "src": "9373:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32275,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9373:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9372:16:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32322,
            "nodeType": "FunctionDefinition",
            "src": "9975:435:38",
            "body": {
              "id": 32321,
              "nodeType": "Block",
              "src": "10111:299:38",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 32303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 32300,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32292,
                      "src": "10125:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 32301,
                        "name": "_localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          32594
                        ],
                        "referencedDeclaration": 32594,
                        "src": "10136:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                          "typeString": "function () view returns (uint32)"
                        }
                      },
                      "id": 32302,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10136:14:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "10125:25:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 32319,
                    "nodeType": "Block",
                    "src": "10263:141:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 32317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32312,
                            "name": "_local",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32298,
                            "src": "10346:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 32314,
                                "name": "_domain",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32292,
                                "src": "10380:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "id": 32315,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32294,
                                "src": "10389:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 32313,
                              "name": "getRepresentationAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32122,
                              "src": "10355:24:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (uint32,bytes32) view returns (address)"
                              }
                            },
                            "id": 32316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10355:38:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10346:47:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 32318,
                        "nodeType": "ExpressionStatement",
                        "src": "10346:47:38"
                      }
                    ]
                  },
                  "id": 32320,
                  "nodeType": "IfStatement",
                  "src": "10121:283:38",
                  "trueBody": {
                    "id": 32311,
                    "nodeType": "Block",
                    "src": "10152:105:38",
                    "statements": [
                      {
                        "expression": {
                          "id": 32309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 32304,
                            "name": "_local",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32298,
                            "src": "10206:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 32307,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32294,
                                "src": "10242:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 32305,
                                "name": "TypeCasts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 46345,
                                "src": "10215:9:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                                  "typeString": "type(library TypeCasts)"
                                }
                              },
                              "id": 32306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "bytes32ToAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46344,
                              "src": "10215:26:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) pure returns (address)"
                              }
                            },
                            "id": 32308,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10215:31:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10206:40:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 32310,
                        "nodeType": "ExpressionStatement",
                        "src": "10206:40:38"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              33677
            ],
            "documentation": {
              "id": 32290,
              "nodeType": "StructuredDocumentation",
              "src": "9482:488:38",
              "text": " @notice Looks up the local address corresponding to a domain/id pair.\n @dev If the token is local, it will return the local address.\n If the token is non-local and no local representation exists, this\n will return `address(0)`.\n @param _domain the domain of the canonical version.\n @param _id the identifier of the canonical version in its domain.\n @return _local the local address of the token contract (representation or canonical)"
            },
            "functionSelector": "589b3c64",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLocalAddress",
            "overrides": {
              "id": 32296,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10065:8:38"
            },
            "parameters": {
              "id": 32295,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32292,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32322,
                  "src": "10000:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32291,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10000:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32294,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32322,
                  "src": "10016:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32293,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10016:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9999:29:38"
            },
            "returnParameters": {
              "id": 32299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32298,
                  "mutability": "mutable",
                  "name": "_local",
                  "nodeType": "VariableDeclaration",
                  "scope": 32322,
                  "src": "10091:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32297,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10091:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10090:16:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 32355,
            "nodeType": "FunctionDefinition",
            "src": "10696:276:38",
            "body": {
              "id": 32354,
              "nodeType": "Block",
              "src": "10829:143:38",
              "statements": [
                {
                  "assignments": [
                    32334
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32334,
                      "mutability": "mutable",
                      "name": "_local",
                      "nodeType": "VariableDeclaration",
                      "scope": 32354,
                      "src": "10839:14:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 32333,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10839:7:38",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32339,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 32336,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32325,
                        "src": "10872:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32337,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32327,
                        "src": "10881:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 32335,
                      "name": "getLocalAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32322,
                      "src": "10856:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (uint32,bytes32) view returns (address)"
                      }
                    },
                    "id": 32338,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10856:29:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10839:46:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 32346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 32341,
                          "name": "_local",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32334,
                          "src": "10903:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 32344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10921:1:38",
                              "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": 32343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10913:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 32342,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10913:7:38",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 32345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10913:10:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "10903:20:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21746f6b656e",
                        "id": 32347,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10925:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6b08df48b67a8acda5828e85af8c62865fe7bd53995164d29920fdc8d1b5e5d9",
                          "typeString": "literal_string \"!token\""
                        },
                        "value": "!token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6b08df48b67a8acda5828e85af8c62865fe7bd53995164d29920fdc8d1b5e5d9",
                          "typeString": "literal_string \"!token\""
                        }
                      ],
                      "id": 32340,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10895:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32348,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10895:39:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32349,
                  "nodeType": "ExpressionStatement",
                  "src": "10895:39:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32351,
                        "name": "_local",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32334,
                        "src": "10958:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32350,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27517,
                      "src": "10951:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$27517_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 32352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10951:14:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$27517",
                      "typeString": "contract IERC20"
                    }
                  },
                  "functionReturnParameters": 32332,
                  "id": 32353,
                  "nodeType": "Return",
                  "src": "10944:21:38"
                }
              ]
            },
            "baseFunctions": [
              33668
            ],
            "documentation": {
              "id": 32323,
              "nodeType": "StructuredDocumentation",
              "src": "10416:275:38",
              "text": " @notice Return the local token contract for the\n canonical tokenId; revert if there is no local token\n @param _domain the token's native domain\n @param _id the token's id on its native domain\n @return the local IERC20 token contract"
            },
            "functionSelector": "2c3da59c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mustHaveLocalToken",
            "overrides": {
              "id": 32329,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10791:8:38"
            },
            "parameters": {
              "id": 32328,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32325,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32355,
                  "src": "10724:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32324,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10724:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32327,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32355,
                  "src": "10740:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32326,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10740:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10723:29:38"
            },
            "returnParameters": {
              "id": 32332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32331,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32355,
                  "src": "10817:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$27517",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "id": 32330,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 27517,
                    "src": "10817:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$27517",
                      "typeString": "contract IERC20"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10816:8:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32383,
            "nodeType": "FunctionDefinition",
            "src": "11099:733:38",
            "body": {
              "id": 32382,
              "nodeType": "Block",
              "src": "11212:620:38",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 32369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 32364,
                          "name": "representationToCanonical",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32027,
                          "src": "11378:25:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                            "typeString": "mapping(address => struct BridgeMessage.TokenId storage ref)"
                          }
                        },
                        "id": 32366,
                        "indexExpression": {
                          "id": 32365,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32358,
                          "src": "11404:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11378:33:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_storage",
                          "typeString": "struct BridgeMessage.TokenId storage ref"
                        }
                      },
                      "id": 32367,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "domain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29622,
                      "src": "11378:40:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 32368,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11422:1:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11378:45:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 32373,
                  "nodeType": "IfStatement",
                  "src": "11374:88:38",
                  "trueBody": {
                    "id": 32372,
                    "nodeType": "Block",
                    "src": "11425:37:38",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 32370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11446:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 32363,
                        "id": 32371,
                        "nodeType": "Return",
                        "src": "11439:12:38"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    32375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32375,
                      "mutability": "mutable",
                      "name": "_codeSize",
                      "nodeType": "VariableDeclaration",
                      "scope": 32382,
                      "src": "11647:17:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32374,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11647:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32376,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11647:17:38"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "11739:56:38",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11753:32:38",
                        "value": {
                          "arguments": [
                            {
                              "name": "_token",
                              "nodeType": "YulIdentifier",
                              "src": "11778:6:38"
                            }
                          ],
                          "functionName": {
                            "name": "extcodesize",
                            "nodeType": "YulIdentifier",
                            "src": "11766:11:38"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11766:19:38"
                        },
                        "variableNames": [
                          {
                            "name": "_codeSize",
                            "nodeType": "YulIdentifier",
                            "src": "11753:9:38"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 32375,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11753:9:38",
                      "valueSize": 1
                    },
                    {
                      "declaration": 32358,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11778:6:38",
                      "valueSize": 1
                    }
                  ],
                  "id": 32377,
                  "nodeType": "InlineAssembly",
                  "src": "11730:65:38"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 32380,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 32378,
                      "name": "_codeSize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32375,
                      "src": "11811:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 32379,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11824:1:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "11811:14:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 32363,
                  "id": 32381,
                  "nodeType": "Return",
                  "src": "11804:21:38"
                }
              ]
            },
            "baseFunctions": [
              33650
            ],
            "documentation": {
              "id": 32356,
              "nodeType": "StructuredDocumentation",
              "src": "10978:116:38",
              "text": " @notice Determine if token is of local origin\n @return TRUE if token is locally originating"
            },
            "functionSelector": "c86415cb",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isLocalOrigin",
            "overrides": {
              "id": 32360,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11176:8:38"
            },
            "parameters": {
              "id": 32359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32358,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 32383,
                  "src": "11122:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32357,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11122:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11121:16:38"
            },
            "returnParameters": {
              "id": 32363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32362,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32383,
                  "src": "11202:4:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 32361,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11202:4:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11201:6:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 32415,
            "nodeType": "FunctionDefinition",
            "src": "12157:316:38",
            "body": {
              "id": 32414,
              "nodeType": "Block",
              "src": "12289:184:38",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 32396,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 32394,
                          "name": "_domain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32386,
                          "src": "12307:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 32395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12318:1:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12307:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "216e756c6c20646f6d61696e",
                        "id": 32397,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12321:14:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18b3a19a159e87aadb1bc7a4cebc62dc4833d7289a0cbe8fec175fe35dbfaaa1",
                          "typeString": "literal_string \"!null domain\""
                        },
                        "value": "!null domain"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_18b3a19a159e87aadb1bc7a4cebc62dc4833d7289a0cbe8fec175fe35dbfaaa1",
                          "typeString": "literal_string \"!null domain\""
                        }
                      ],
                      "id": 32393,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12299:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32398,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12299:37:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32399,
                  "nodeType": "ExpressionStatement",
                  "src": "12299:37:38"
                },
                {
                  "expression": {
                    "id": 32405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32400,
                          "name": "representationToCanonical",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32027,
                          "src": "12346:25:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                            "typeString": "mapping(address => struct BridgeMessage.TokenId storage ref)"
                          }
                        },
                        "id": 32402,
                        "indexExpression": {
                          "id": 32401,
                          "name": "_representation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32390,
                          "src": "12372:15:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12346:42:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_storage",
                          "typeString": "struct BridgeMessage.TokenId storage ref"
                        }
                      },
                      "id": 32403,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "domain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29622,
                      "src": "12346:49:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32404,
                      "name": "_domain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32386,
                      "src": "12398:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "12346:59:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 32406,
                  "nodeType": "ExpressionStatement",
                  "src": "12346:59:38"
                },
                {
                  "expression": {
                    "id": 32412,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "baseExpression": {
                          "id": 32407,
                          "name": "representationToCanonical",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32027,
                          "src": "12415:25:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_TokenId_$29625_storage_$",
                            "typeString": "mapping(address => struct BridgeMessage.TokenId storage ref)"
                          }
                        },
                        "id": 32409,
                        "indexExpression": {
                          "id": 32408,
                          "name": "_representation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32390,
                          "src": "12441:15:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12415:42:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_TokenId_$29625_storage",
                          "typeString": "struct BridgeMessage.TokenId storage ref"
                        }
                      },
                      "id": 32410,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29624,
                      "src": "12415:45:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32411,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32388,
                      "src": "12463:3:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "12415:51:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 32413,
                  "nodeType": "ExpressionStatement",
                  "src": "12415:51:38"
                }
              ]
            },
            "documentation": {
              "id": 32384,
              "nodeType": "StructuredDocumentation",
              "src": "11884:268:38",
              "text": " @notice Set the primary representation for a given canonical\n @param _domain the domain of the canonical token\n @param _id the bytes32 ID pf the canonical of the token\n @param _representation the address of the representation token"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setRepresentationToCanonical",
            "parameters": {
              "id": 32391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32386,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32415,
                  "src": "12205:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32385,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12205:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32388,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32415,
                  "src": "12229:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32387,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12229:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32390,
                  "mutability": "mutable",
                  "name": "_representation",
                  "nodeType": "VariableDeclaration",
                  "scope": 32415,
                  "src": "12250:23:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32389,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12250:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12195:84:38"
            },
            "returnParameters": {
              "id": 32392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12289:0:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32456,
            "nodeType": "FunctionDefinition",
            "src": "12750:378:38",
            "body": {
              "id": 32455,
              "nodeType": "Block",
              "src": "12882:246:38",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 32431,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 32426,
                          "name": "_representation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32422,
                          "src": "12900:15:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 32429,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12927:1:38",
                              "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": 32428,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12919:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 32427,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12919:7:38",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 32430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12919:10:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "12900:29:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "216e756c6c2072657072",
                        "id": 32432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12931:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_193f0fc57f7d3c0e4d9ffb9a301402e93e27f72876dce272e52c3b3ede21fee9",
                          "typeString": "literal_string \"!null repr\""
                        },
                        "value": "!null repr"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_193f0fc57f7d3c0e4d9ffb9a301402e93e27f72876dce272e52c3b3ede21fee9",
                          "typeString": "literal_string \"!null repr\""
                        }
                      ],
                      "id": 32425,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12892:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 32433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12892:52:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32434,
                  "nodeType": "ExpressionStatement",
                  "src": "12892:52:38"
                },
                {
                  "assignments": [
                    32436
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32436,
                      "mutability": "mutable",
                      "name": "_tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 32455,
                      "src": "12954:16:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 32435,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "12954:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32442,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 32439,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32418,
                        "src": "13001:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32440,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32420,
                        "src": "13010:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 32437,
                        "name": "BridgeMessage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30301,
                        "src": "12973:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                          "typeString": "type(library BridgeMessage)"
                        }
                      },
                      "id": 32438,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatTokenId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29928,
                      "src": "12973:27:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$returns$_t_bytes29_$",
                        "typeString": "function (uint32,bytes32) pure returns (bytes29)"
                      }
                    },
                    "id": 32441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12973:41:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12954:60:38"
                },
                {
                  "assignments": [
                    32444
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32444,
                      "mutability": "mutable",
                      "name": "_idHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 32455,
                      "src": "13024:15:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 32443,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13024:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32448,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 32445,
                        "name": "_tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32436,
                        "src": "13042:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "id": 32446,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 29220,
                      "src": "13042:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes29_$returns$_t_bytes32_$bound_to$_t_bytes29_$",
                        "typeString": "function (bytes29) pure returns (bytes32)"
                      }
                    },
                    "id": 32447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13042:17:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13024:35:38"
                },
                {
                  "expression": {
                    "id": 32453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 32449,
                        "name": "canonicalToRepresentation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32031,
                        "src": "13069:25:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 32451,
                      "indexExpression": {
                        "id": 32450,
                        "name": "_idHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32444,
                        "src": "13095:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "13069:34:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 32452,
                      "name": "_representation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32422,
                      "src": "13106:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "13069:52:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32454,
                  "nodeType": "ExpressionStatement",
                  "src": "13069:52:38"
                }
              ]
            },
            "documentation": {
              "id": 32416,
              "nodeType": "StructuredDocumentation",
              "src": "12479:266:38",
              "text": " @notice Set the canonical token for a given representation\n @param _domain the domain of the canonical token\n @param _id the bytes32 ID pf the canonical of the token\n @param _representation the address of the representation token"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setCanonicalToRepresentation",
            "parameters": {
              "id": 32423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32418,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32456,
                  "src": "12798:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32417,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12798:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32420,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32456,
                  "src": "12822:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32419,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12822:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32422,
                  "mutability": "mutable",
                  "name": "_representation",
                  "nodeType": "VariableDeclaration",
                  "scope": 32456,
                  "src": "12843:23:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32421,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12843:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12788:84:38"
            },
            "returnParameters": {
              "id": 32424,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12882:0:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32528,
            "nodeType": "FunctionDefinition",
            "src": "13355:1067:38",
            "body": {
              "id": 32527,
              "nodeType": "Block",
              "src": "13460:962:38",
              "statements": [
                {
                  "expression": {
                    "id": 32475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32466,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32464,
                      "src": "13522:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 32471,
                              "name": "tokenBeacon",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32023,
                              "src": "13562:11:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 32472,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13575:2:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 32470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "13539:22:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_creation_payable$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_UpgradeBeaconProxy_$46642_$",
                              "typeString": "function (address,bytes memory) payable returns (contract UpgradeBeaconProxy)"
                            },
                            "typeName": {
                              "id": 32469,
                              "name": "UpgradeBeaconProxy",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 46642,
                              "src": "13543:18:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_UpgradeBeaconProxy_$46642",
                                "typeString": "contract UpgradeBeaconProxy"
                              }
                            }
                          },
                          "id": 32473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13539:39:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UpgradeBeaconProxy_$46642",
                            "typeString": "contract UpgradeBeaconProxy"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_UpgradeBeaconProxy_$46642",
                            "typeString": "contract UpgradeBeaconProxy"
                          }
                        ],
                        "id": 32468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "13531:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 32467,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13531:7:38",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 32474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13531:48:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "13522:57:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 32476,
                  "nodeType": "ExpressionStatement",
                  "src": "13522:57:38"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "id": 32478,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32464,
                            "src": "13810:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 32477,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "13797:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 32479,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13797:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 32480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33548,
                      "src": "13797:31:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 32481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13797:33:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32482,
                  "nodeType": "ExpressionStatement",
                  "src": "13797:33:38"
                },
                {
                  "assignments": [
                    32484,
                    32486
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 32484,
                      "mutability": "mutable",
                      "name": "_name",
                      "nodeType": "VariableDeclaration",
                      "scope": 32527,
                      "src": "13888:19:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 32483,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "13888:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 32486,
                      "mutability": "mutable",
                      "name": "_symbol",
                      "nodeType": "VariableDeclaration",
                      "scope": 32527,
                      "src": "13909:21:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 32485,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "13909:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32491,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 32488,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32459,
                        "src": "13963:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32489,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32461,
                        "src": "13984:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 32487,
                      "name": "_defaultDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32581,
                      "src": "13934:15:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$returns$_t_string_memory_ptr_$_t_string_memory_ptr_$",
                        "typeString": "function (uint32,bytes32) pure returns (string memory,string memory)"
                      }
                    },
                    "id": 32490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13934:63:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_string_memory_ptr_$_t_string_memory_ptr_$",
                      "typeString": "tuple(string memory,string memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13887:110:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32496,
                        "name": "_name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32484,
                        "src": "14039:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 32497,
                        "name": "_symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32486,
                        "src": "14046:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "hexValue": "3138",
                        "id": 32498,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14055:2:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        },
                        "value": "18"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 32493,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32464,
                            "src": "14020:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 32492,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "14007:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 32494,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14007:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 32495,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setDetails",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33603,
                      "src": "14007:31:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8) external"
                      }
                    },
                    "id": 32499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14007:51:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32500,
                  "nodeType": "ExpressionStatement",
                  "src": "14007:51:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 32505,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23099,
                          "src": "14153:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 32506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14153:7:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 32502,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32464,
                            "src": "14127:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 32501,
                          "name": "IBridgeToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 33609,
                          "src": "14114:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IBridgeToken_$33609_$",
                            "typeString": "type(contract IBridgeToken)"
                          }
                        },
                        "id": 32503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14114:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                          "typeString": "contract IBridgeToken"
                        }
                      },
                      "id": 32504,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 33608,
                      "src": "14114:38:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 32507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14114:47:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32508,
                  "nodeType": "ExpressionStatement",
                  "src": "14114:47:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32510,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32459,
                        "src": "14236:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32511,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32461,
                        "src": "14245:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 32512,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32464,
                        "src": "14250:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32509,
                      "name": "_setCanonicalToRepresentation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32456,
                      "src": "14206:29:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,bytes32,address)"
                      }
                    },
                    "id": 32513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14206:51:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32514,
                  "nodeType": "ExpressionStatement",
                  "src": "14206:51:38"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 32516,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32459,
                        "src": "14297:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32517,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32461,
                        "src": "14306:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 32518,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32464,
                        "src": "14311:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32515,
                      "name": "_setRepresentationToCanonical",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32415,
                      "src": "14267:29:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,bytes32,address)"
                      }
                    },
                    "id": 32519,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14267:51:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32520,
                  "nodeType": "ExpressionStatement",
                  "src": "14267:51:38"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 32522,
                        "name": "_domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32459,
                        "src": "14394:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 32523,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32461,
                        "src": "14403:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 32524,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 32464,
                        "src": "14408:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 32521,
                      "name": "TokenDeployed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32044,
                      "src": "14380:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (uint32,bytes32,address)"
                      }
                    },
                    "id": 32525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14380:35:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 32526,
                  "nodeType": "EmitStatement",
                  "src": "14375:40:38"
                }
              ]
            },
            "documentation": {
              "id": 32457,
              "nodeType": "StructuredDocumentation",
              "src": "13134:216:38",
              "text": " @notice Deploy and initialize a new token contract\n @dev Each token contract is a proxy which\n points to the token upgrade beacon\n @return _token the address of the token contract"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_deployToken",
            "parameters": {
              "id": 32462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32459,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32528,
                  "src": "13377:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32458,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13377:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32461,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32528,
                  "src": "13393:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32460,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13393:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13376:29:38"
            },
            "returnParameters": {
              "id": 32465,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32464,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 32528,
                  "src": "13440:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 32463,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13440:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13439:16:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32581,
            "nodeType": "FunctionDefinition",
            "src": "14832:758:38",
            "body": {
              "id": 32580,
              "nodeType": "Block",
              "src": "14981:609:38",
              "statements": [
                {
                  "assignments": [
                    null,
                    32541
                  ],
                  "declarations": [
                    null,
                    {
                      "constant": false,
                      "id": 32541,
                      "mutability": "mutable",
                      "name": "_secondHalfId",
                      "nodeType": "VariableDeclaration",
                      "scope": 32580,
                      "src": "15051:21:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 32540,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15051:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 32549,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 32546,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32533,
                            "src": "15103:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 32545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15095:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 32544,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "15095:7:38",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 32547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15095:12:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 32542,
                        "name": "Encoding",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31983,
                        "src": "15076:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Encoding_$31983_$",
                          "typeString": "type(library Encoding)"
                        }
                      },
                      "id": 32543,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "encodeHex",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31931,
                      "src": "15076:18:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 32548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15076:32:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15048:60:38"
                },
                {
                  "expression": {
                    "id": 32566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32550,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32536,
                      "src": "15199:5:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 32557,
                                  "name": "_domain",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32531,
                                  "src": "15284:7:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                ],
                                "expression": {
                                  "id": 32555,
                                  "name": "Encoding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 31983,
                                  "src": "15261:8:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Encoding_$31983_$",
                                    "typeString": "type(library Encoding)"
                                  }
                                },
                                "id": 32556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "decimalUint32",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 31840,
                                "src": "15261:22:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$_t_uint80_$",
                                  "typeString": "function (uint32) pure returns (uint80)"
                                }
                              },
                              "id": 32558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15261:31:38",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint80",
                                "typeString": "uint80"
                              }
                            },
                            {
                              "hexValue": "2e",
                              "id": 32559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15316:3:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                                "typeString": "literal_string \".\""
                              },
                              "value": "."
                            },
                            {
                              "arguments": [
                                {
                                  "id": 32562,
                                  "name": "_secondHalfId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32541,
                                  "src": "15349:13:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 32561,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15342:6:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint32_$",
                                  "typeString": "type(uint32)"
                                },
                                "typeName": {
                                  "id": 32560,
                                  "name": "uint32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15342:6:38",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 32563,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15342:21:38",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint80",
                                "typeString": "uint80"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf",
                                "typeString": "literal_string \".\""
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "expression": {
                              "id": 32553,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "15227:3:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 32554,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "15227:16:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 32564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15227:155:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 32552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15207:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        },
                        "typeName": {
                          "id": 32551,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "15207:6:38",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 32565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15207:185:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "15199:193:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 32567,
                  "nodeType": "ExpressionStatement",
                  "src": "15199:193:38"
                },
                {
                  "expression": {
                    "id": 32577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 32568,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32538,
                      "src": "15458:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_rational_15_by_1",
                            "typeString": "int_const 15"
                          },
                          "id": 32575,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_rational_11_by_1",
                              "typeString": "int_const 11"
                            },
                            "id": 32573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3130",
                              "id": 32571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15479:2:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_10_by_1",
                                "typeString": "int_const 10"
                              },
                              "value": "10"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 32572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15484:1:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "15479:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_11_by_1",
                              "typeString": "int_const 11"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "34",
                            "id": 32574,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15488:1:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "15479:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_15_by_1",
                            "typeString": "int_const 15"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_15_by_1",
                            "typeString": "int_const 15"
                          }
                        ],
                        "id": 32570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "15468:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                          "typeString": "function (uint256) pure returns (string memory)"
                        },
                        "typeName": {
                          "id": 32569,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "15472:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        }
                      },
                      "id": 32576,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15468:22:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "15458:32:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "id": 32578,
                  "nodeType": "ExpressionStatement",
                  "src": "15458:32:38"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "15509:75:38",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "_symbol",
                                  "nodeType": "YulIdentifier",
                                  "src": "15534:7:38"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "15543:4:38",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "15530:3:38"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "15530:18:38"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "_name",
                                      "nodeType": "YulIdentifier",
                                      "src": "15560:5:38"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "15567:4:38",
                                      "type": "",
                                      "value": "0x20"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "15556:3:38"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "15556:16:38"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "15550:5:38"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "15550:23:38"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "15523:6:38"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "15523:51:38"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "15523:51:38"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 32536,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "15560:5:38",
                      "valueSize": 1
                    },
                    {
                      "declaration": 32538,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "15534:7:38",
                      "valueSize": 1
                    }
                  ],
                  "id": 32579,
                  "nodeType": "InlineAssembly",
                  "src": "15500:84:38"
                }
              ]
            },
            "documentation": {
              "id": 32529,
              "nodeType": "StructuredDocumentation",
              "src": "14428:399:38",
              "text": " @notice Get default name and details for a token\n         Sets name to \"[domain].[id]\", and symbol to the first 15\n         bytes of the name.\n @dev Symbol of 15 bytes is chosen to ensure we don't accidentally break\n      the foxy wallet\n @param _domain the domain of the canonical token\n @param _id the bytes32 ID pf the canonical of the token"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_defaultDetails",
            "parameters": {
              "id": 32534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32531,
                  "mutability": "mutable",
                  "name": "_domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 32581,
                  "src": "14857:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32530,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14857:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32533,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 32581,
                  "src": "14873:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 32532,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14873:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14856:29:38"
            },
            "returnParameters": {
              "id": 32539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32536,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 32581,
                  "src": "14933:19:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 32535,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "14933:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 32538,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 32581,
                  "src": "14954:21:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 32537,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "14954:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14932:44:38"
            },
            "scope": 32603,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32594,
            "nodeType": "FunctionDefinition",
            "src": "15787:181:38",
            "body": {
              "id": 32593,
              "nodeType": "Block",
              "src": "15909:59:38",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 32589,
                        "name": "XAppConnectionClient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 46866,
                        "src": "15926:20:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_XAppConnectionClient_$46866_$",
                          "typeString": "type(contract XAppConnectionClient)"
                        }
                      },
                      "id": 32590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_localDomain",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46865,
                      "src": "15926:33:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint32_$",
                        "typeString": "function () view returns (uint32)"
                      }
                    },
                    "id": 32591,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15926:35:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 32588,
                  "id": 32592,
                  "nodeType": "Return",
                  "src": "15919:42:38"
                }
              ]
            },
            "baseFunctions": [
              46865
            ],
            "documentation": {
              "id": 32582,
              "nodeType": "StructuredDocumentation",
              "src": "15596:186:38",
              "text": " @dev explicit override for compiler inheritance\n @dev explicit override for compiler inheritance\n @return domain of chain on which the contract is deployed"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_localDomain",
            "overrides": {
              "id": 32585,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 32584,
                  "name": "XAppConnectionClient",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 46866,
                  "src": "15858:20:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_XAppConnectionClient_$46866",
                    "typeString": "contract XAppConnectionClient"
                  }
                }
              ],
              "src": "15849:30:38"
            },
            "parameters": {
              "id": 32583,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15808:2:38"
            },
            "returnParameters": {
              "id": 32588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 32587,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 32594,
                  "src": "15897:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 32586,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15897:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15896:8:38"
            },
            "scope": 32603,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 32602,
            "nodeType": "FunctionDefinition",
            "src": "16161:84:38",
            "body": {
              "id": 32601,
              "nodeType": "Block",
              "src": "16216:29:38",
              "statements": []
            },
            "baseFunctions": [
              23135
            ],
            "documentation": {
              "id": 32595,
              "nodeType": "StructuredDocumentation",
              "src": "15974:182:38",
              "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": 32599,
                "modifierName": {
                  "id": 32598,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "16206:9:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16206:9:38"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 32597,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16197:8:38"
            },
            "parameters": {
              "id": 32596,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16187:2:38"
            },
            "returnParameters": {
              "id": 32600,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16216:0:38"
            },
            "scope": 32603,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 32007,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23676,
              "src": "1853:13:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$23676",
                "typeString": "contract Initializable"
              }
            },
            "id": 32008,
            "nodeType": "InheritanceSpecifier",
            "src": "1853:13:38"
          },
          {
            "baseName": {
              "id": 32009,
              "name": "XAppConnectionClient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46866,
              "src": "1868:20:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_XAppConnectionClient_$46866",
                "typeString": "contract XAppConnectionClient"
              }
            },
            "id": 32010,
            "nodeType": "InheritanceSpecifier",
            "src": "1868:20:38"
          },
          {
            "baseName": {
              "id": 32011,
              "name": "ITokenRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33703,
              "src": "1890:14:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenRegistry_$33703",
                "typeString": "contract ITokenRegistry"
              }
            },
            "id": 32012,
            "nodeType": "InheritanceSpecifier",
            "src": "1890:14:38"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          33703,
          46642,
          46866
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 32006,
          "nodeType": "StructuredDocumentation",
          "src": "954:872:38",
          "text": " @title TokenRegistry\n @notice manages a registry of token contracts on this chain\n -\n We sort token types as \"representation token\" or \"locally originating token\".\n Locally originating - a token contract that was originally deployed on the local chain\n Representation (repr) - a token that was originally deployed on some other chain\n -\n When the BridgeRouter handles an incoming message, it determines whether the\n transfer is for an asset of local origin. If not, it checks for an existing\n representation contract. If no such representation exists, it deploys a new\n representation contract. It then stores the relationship in the\n \"reprToCanonical\" and \"canonicalToRepr\" mappings to ensure we can always\n perform a lookup in either direction\n Note that locally originating tokens should NEVER be represented in these lookup tables."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          32603,
          33703,
          46866,
          23168,
          25131,
          23676
        ],
        "name": "TokenRegistry",
        "scope": 32604
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 38
}