{
  "contractName": "APMRegistryFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "registryBase",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ensSubdomainRegistrarBase",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "daoFactory",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "repoBase",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_daoFactory",
          "type": "address"
        },
        {
          "name": "_registryBase",
          "type": "address"
        },
        {
          "name": "_repoBase",
          "type": "address"
        },
        {
          "name": "_ensSubBase",
          "type": "address"
        },
        {
          "name": "_ens",
          "type": "address"
        },
        {
          "name": "_ensFactory",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "apm",
          "type": "address"
        }
      ],
      "name": "DeployAPM",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_tld",
          "type": "bytes32"
        },
        {
          "name": "_label",
          "type": "bytes32"
        },
        {
          "name": "_root",
          "type": "address"
        }
      ],
      "name": "newAPM",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405160c0806200268f83398101604090815281516020830151918301516060840151608085015160a09095015160008054600160a060020a0319908116600160a060020a03808816919091179092556001805482168389161790556002805482168387161790556003805490911682851617905593959293919291821615156200012d57604080517fe9358b010000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a0383169163e9358b019160248083019260209291908290030181600087803b158015620000f957600080fd5b505af11580156200010e573d6000803e3d6000fd5b505050506040513d60208110156200012557600080fd5b50516200012f565b815b60048054600160a060020a0392909216600160a060020a031990921691909117905550505050505061252880620001676000396000f3006080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166339ca6e86811461007c5780633cfb35aa146100ba5780633f15457f146100cf57806348f7f2a3146100e4578063aac57b3a146100f9578063caf1bb7c1461012d575b600080fd5b34801561008857600080fd5b50610091610142565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100c657600080fd5b5061009161015e565b3480156100db57600080fd5b5061009161017a565b3480156100f057600080fd5b50610091610196565b34801561010557600080fd5b5061009160043560243573ffffffffffffffffffffffffffffffffffffffff604435166101b2565b34801561013957600080fd5b5061009161223b565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060606000806000806101c86124dd565b8c8c6040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061022f5780518252601f199092019160209182019101610210565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220600480547f02571be30000000000000000000000000000000000000000000000000000000085529084018290529451909f5030965073ffffffffffffffffffffffffffffffffffffffff90941694506302571be3936024808401945091929091908290030181600087803b1580156102eb57600080fd5b505af11580156102ff573d6000803e3d6000fd5b505050506040513d602081101561031557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610524573073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be38f6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b505050506040513d602081101561040c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161461042e57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238e8e306040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561050b57600080fd5b505af115801561051f573d6000803e3d6000fd5b505050505b60008054604080517f21687444000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926321687444926024808401936020939083900390910190829087803b15801561059857600080fd5b505af11580156105ac573d6000803e3d6000fd5b505050506040513d60208110156105c257600080fd5b5051604080517fde287359000000000000000000000000000000000000000000000000000000008152905191995073ffffffffffffffffffffffffffffffffffffffff8a169163de287359916004808201926020929091908290030181600087803b15801561063057600080fd5b505af1158015610644573d6000803e3d6000fd5b505050506040513d602081101561065a57600080fd5b5051604080517f8ea8dc9d000000000000000000000000000000000000000000000000000000008152905191985073ffffffffffffffffffffffffffffffffffffffff808a169263be0384789230928d9290831691638ea8dc9d9160048083019260209291908290030181600087803b1580156106d657600080fd5b505af11580156106ea573d6000803e3d6000fd5b505050506040513d602081101561070057600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201523060648201529051608480830192600092919082900301818387803b15801561078157600080fd5b505af1158015610795573d6000803e3d6000fd5b50506040805160008152606081018252600a60208083018281527f61706d2d656e73737562000000000000000000000000000000000000000000008486019081529451939c5073ffffffffffffffffffffffffffffffffffffffff8f16965063397edd4195508f949093909101918291908083835b602083106108295780518252601f19909201916020918201910161080a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061088c5780518252601f19909201916020918201910161086d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b602083106109245780518252601f199092019160209182019101610905565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168960006040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610a29578181015183820152602001610a11565b50505050905090810190601f168015610a565780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610a7857600080fd5b505af1158015610a8c573d6000803e3d6000fd5b505050506040513d6020811015610aa257600080fd5b5051604080518082018252600c8082527f61706d2d726567697374727900000000000000000000000000000000000000006020838101918252935194995073ffffffffffffffffffffffffffffffffffffffff8d169463397edd41948f949391019182918083835b60208310610b295780518252601f199092019160209182019101610b0a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610b8c5780518252601f199092019160209182019101610b6d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310610c245780518252601f199092019160209182019101610c05565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168960006040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610d29578181015183820152602001610d11565b50505050905090810190601f168015610d565780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050506040513d6020811015610da257600080fd5b505160408051808201825260088082527f61706d2d7265706f000000000000000000000000000000000000000000000000602083810191825293519498508d949293929092019182918083835b60208310610e0e5780518252601f199092019160209182019101610def565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610e715780518252601f199092019160209182019101610e52565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310610f095780518252601f199092019160209182019101610eea565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382207fdb8a61d4000000000000000000000000000000000000000000000000000000008352935193985073ffffffffffffffffffffffffffffffffffffffff8e16955063ae5b25409450859363db8a61d493506004808401938290030181600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b5051600254604080517c010000000000000000000000000000000000000000000000000000000063ffffffff861602815260048101939093526024830188905273ffffffffffffffffffffffffffffffffffffffff909116604483015251606480830192600092919082900301818387803b15801561106357600080fd5b505af1158015611077573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8816815290518c93507f5dd941cb8701bb50205e5aef88c8532b8d6e75b7b65e2c458e9acdf261f0f29292509081900360200190a28673ffffffffffffffffffffffffffffffffffffffff1663be03847885878873ffffffffffffffffffffffffffffffffffffffff1663fef47e386040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b505050506040513d602081101561117357600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401526044830191909152918f1660648201529051608480830192600092919082900301818387803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663be03847885878873ffffffffffffffffffffffffffffffffffffffff1663307482cf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b505050506040513d60208110156112bc57600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401526044830191909152918f1660648201529051608480830192600092919082900301818387803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b505050506040513d60208110156113e757600080fd5b5051604080517f0a8ed3db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528a16602482018190526044820184905291519294509091630a8ed3db9160648082019260009290919082900301818387803b15801561146b57600080fd5b505af115801561147f573d6000803e3d6000fd5b505060048054604080517f5b0fc9c30000000000000000000000000000000000000000000000000000000081529283018e905273ffffffffffffffffffffffffffffffffffffffff8a81166024850152905191169350635b0fc9c39250604480830192600092919082900301818387803b1580156114fc57600080fd5b505af1158015611510573d6000803e3d6000fd5b505060048054604080517fbe13f47c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831693810193909352602483018e905251908916935063be13f47c9250604480830192600092919082900301818387803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663c4d66de8866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561164357600080fd5b505af1158015611657573d6000803e3d6000fd5b5050600183525050604080517f5e1f3fa8000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff808a169263be038478923092899290831691635e1f3fa8916004808201926020929091908290030181600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050506040513d602081101561170157600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201523060648201529051608480830192600092919082900301818387803b15801561178257600080fd5b505af1158015611796573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff166332ab6af06040805190810160405280600c81526020017f61706d2d726567697374727900000000000000000000000000000000000000008152508d84600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661184f6040805190810160405280600881526020017f697066733a61706d000000000000000000000000000000000000000000000000815250612257565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff851660248201526004810190819060440185606080838360005b838110156118c15781810151838201526020016118a9565b505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835288818151815260200191508051906020019080838360005b8381101561193357818101518382015260200161191b565b50505050905090810190601f1680156119605780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561199357818101518382015260200161197b565b50505050905090810190601f1680156119c05780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156119e457600080fd5b505af11580156119f8573d6000803e3d6000fd5b505050506040513d6020811015611a0e57600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff166332ab6af06040805190810160405280600a81526020017f61706d2d656e73737562000000000000000000000000000000000000000000008152508d84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ad56040805190810160405280600b81526020017f697066733a656e73737562000000000000000000000000000000000000000000815250612257565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff851660248201526004810190819060440185606080838360005b83811015611b47578181015183820152602001611b2f565b505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611bb9578181015183820152602001611ba1565b50505050905090810190601f168015611be65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611c19578181015183820152602001611c01565b50505050905090810190601f168015611c465780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b158015611c6a57600080fd5b505af1158015611c7e573d6000803e3d6000fd5b505050506040513d6020811015611c9457600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff166332ab6af06040805190810160405280600881526020017f61706d2d7265706f0000000000000000000000000000000000000000000000008152508d84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d5b6040805190810160405280600981526020017f697066733a7265706f0000000000000000000000000000000000000000000000815250612257565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff851660248201526004810190819060440185606080838360005b83811015611dcd578181015183820152602001611db5565b505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611e3f578181015183820152602001611e27565b50505050905090810190601f168015611e6c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611e9f578181015183820152602001611e87565b50505050905090810190601f168015611ecc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b158015611ef057600080fd5b505af1158015611f04573d6000803e3d6000fd5b505050506040513d6020811015611f1a57600080fd5b50611f28905087858d61225a565b8673ffffffffffffffffffffffffffffffffffffffff1663afd925df8c8a8b73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611faa57600080fd5b505af1158015611fbe573d6000803e3d6000fd5b505050506040513d6020811015611fd457600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b5050604080517f9d0effdb00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8b1660248201819052604482018790529151919350639d0effdb925060648082019260009290919082900301818387803b1580156120e457600080fd5b505af11580156120f8573d6000803e3d6000fd5b5050604080517f0a8ed3db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301528b1660248201819052604482018790529151919350630a8ed3db925060648082019260009290919082900301818387803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050604080517fafd925df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301528b166024820181905260448201879052915191935063afd925df925060648082019260009290919082900301818387803b15801561221257600080fd5b505af1158015612226573d6000803e3d6000fd5b50959f9e505050505050505050505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b90565b8273ffffffffffffffffffffffffffffffffffffffff16630a8ed3db82848573ffffffffffffffffffffffffffffffffffffffff16635e1f3fa86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156122dc57600080fd5b505af11580156122f0573d6000803e3d6000fd5b505050506040513d602081101561230657600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b15801561238157600080fd5b505af1158015612395573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663afd925df82848573ffffffffffffffffffffffffffffffffffffffff16635e1f3fa86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b505050506040513d602081101561244557600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b1580156124c057600080fd5b505af11580156124d4573d6000803e3d6000fd5b50505050505050565b60606040519081016040528060039060208202803883395091929150505600a165627a7a72305820d62cb790dd501b722e4d61984299b42424673121e33f3bf73319b99abfd1651c0029",
  "deployedBytecode": "0x6080604052600436106100775763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166339ca6e86811461007c5780633cfb35aa146100ba5780633f15457f146100cf57806348f7f2a3146100e4578063aac57b3a146100f9578063caf1bb7c1461012d575b600080fd5b34801561008857600080fd5b50610091610142565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156100c657600080fd5b5061009161015e565b3480156100db57600080fd5b5061009161017a565b3480156100f057600080fd5b50610091610196565b34801561010557600080fd5b5061009160043560243573ffffffffffffffffffffffffffffffffffffffff604435166101b2565b34801561013957600080fd5b5061009161223b565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060606000806000806101c86124dd565b8c8c6040516020018083600019166000191681526020018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061022f5780518252601f199092019160209182019101610210565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018290038220600480547f02571be30000000000000000000000000000000000000000000000000000000085529084018290529451909f5030965073ffffffffffffffffffffffffffffffffffffffff90941694506302571be3936024808401945091929091908290030181600087803b1580156102eb57600080fd5b505af11580156102ff573d6000803e3d6000fd5b505050506040513d602081101561031557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610524573073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be38f6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b505050506040513d602081101561040c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161461042e57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238e8e306040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561050b57600080fd5b505af115801561051f573d6000803e3d6000fd5b505050505b60008054604080517f21687444000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216926321687444926024808401936020939083900390910190829087803b15801561059857600080fd5b505af11580156105ac573d6000803e3d6000fd5b505050506040513d60208110156105c257600080fd5b5051604080517fde287359000000000000000000000000000000000000000000000000000000008152905191995073ffffffffffffffffffffffffffffffffffffffff8a169163de287359916004808201926020929091908290030181600087803b15801561063057600080fd5b505af1158015610644573d6000803e3d6000fd5b505050506040513d602081101561065a57600080fd5b5051604080517f8ea8dc9d000000000000000000000000000000000000000000000000000000008152905191985073ffffffffffffffffffffffffffffffffffffffff808a169263be0384789230928d9290831691638ea8dc9d9160048083019260209291908290030181600087803b1580156106d657600080fd5b505af11580156106ea573d6000803e3d6000fd5b505050506040513d602081101561070057600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201523060648201529051608480830192600092919082900301818387803b15801561078157600080fd5b505af1158015610795573d6000803e3d6000fd5b50506040805160008152606081018252600a60208083018281527f61706d2d656e73737562000000000000000000000000000000000000000000008486019081529451939c5073ffffffffffffffffffffffffffffffffffffffff8f16965063397edd4195508f949093909101918291908083835b602083106108295780518252601f19909201916020918201910161080a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b6020831061088c5780518252601f19909201916020918201910161086d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b602083106109245780518252601f199092019160209182019101610905565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168960006040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610a29578181015183820152602001610a11565b50505050905090810190601f168015610a565780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610a7857600080fd5b505af1158015610a8c573d6000803e3d6000fd5b505050506040513d6020811015610aa257600080fd5b5051604080518082018252600c8082527f61706d2d726567697374727900000000000000000000000000000000000000006020838101918252935194995073ffffffffffffffffffffffffffffffffffffffff8d169463397edd41948f949391019182918083835b60208310610b295780518252601f199092019160209182019101610b0a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610b8c5780518252601f199092019160209182019101610b6d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310610c245780518252601f199092019160209182019101610c05565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168960006040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600019166000191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b83811015610d29578181015183820152602001610d11565b50505050905090810190601f168015610d565780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050506040513d6020811015610da257600080fd5b505160408051808201825260088082527f61706d2d7265706f000000000000000000000000000000000000000000000000602083810191825293519498508d949293929092019182918083835b60208310610e0e5780518252601f199092019160209182019101610def565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526040518082805190602001908083835b60208310610e715780518252601f199092019160209182019101610e52565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382208282019790975281840196909652825180820384018152606090910192839052805190959294508493509185019190508083835b60208310610f095780518252601f199092019160209182019101610eea565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052604080519290940182900382207fdb8a61d4000000000000000000000000000000000000000000000000000000008352935193985073ffffffffffffffffffffffffffffffffffffffff8e16955063ae5b25409450859363db8a61d493506004808401938290030181600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b505050506040513d6020811015610fe557600080fd5b5051600254604080517c010000000000000000000000000000000000000000000000000000000063ffffffff861602815260048101939093526024830188905273ffffffffffffffffffffffffffffffffffffffff909116604483015251606480830192600092919082900301818387803b15801561106357600080fd5b505af1158015611077573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8816815290518c93507f5dd941cb8701bb50205e5aef88c8532b8d6e75b7b65e2c458e9acdf261f0f29292509081900360200190a28673ffffffffffffffffffffffffffffffffffffffff1663be03847885878873ffffffffffffffffffffffffffffffffffffffff1663fef47e386040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b505050506040513d602081101561117357600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401526044830191909152918f1660648201529051608480830192600092919082900301818387803b1580156111f857600080fd5b505af115801561120c573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff1663be03847885878873ffffffffffffffffffffffffffffffffffffffff1663307482cf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b505050506040513d60208110156112bc57600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292841660248401526044830191909152918f1660648201529051608480830192600092919082900301818387803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff16633d6ab68f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b505050506040513d60208110156113e757600080fd5b5051604080517f0a8ed3db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528a16602482018190526044820184905291519294509091630a8ed3db9160648082019260009290919082900301818387803b15801561146b57600080fd5b505af115801561147f573d6000803e3d6000fd5b505060048054604080517f5b0fc9c30000000000000000000000000000000000000000000000000000000081529283018e905273ffffffffffffffffffffffffffffffffffffffff8a81166024850152905191169350635b0fc9c39250604480830192600092919082900301818387803b1580156114fc57600080fd5b505af1158015611510573d6000803e3d6000fd5b505060048054604080517fbe13f47c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831693810193909352602483018e905251908916935063be13f47c9250604480830192600092919082900301818387803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663c4d66de8866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561164357600080fd5b505af1158015611657573d6000803e3d6000fd5b5050600183525050604080517f5e1f3fa8000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff808a169263be038478923092899290831691635e1f3fa8916004808201926020929091908290030181600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050506040513d602081101561170157600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201523060648201529051608480830192600092919082900301818387803b15801561178257600080fd5b505af1158015611796573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff166332ab6af06040805190810160405280600c81526020017f61706d2d726567697374727900000000000000000000000000000000000000008152508d84600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661184f6040805190810160405280600881526020017f697066733a61706d000000000000000000000000000000000000000000000000815250612257565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff851660248201526004810190819060440185606080838360005b838110156118c15781810151838201526020016118a9565b505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835288818151815260200191508051906020019080838360005b8381101561193357818101518382015260200161191b565b50505050905090810190601f1680156119605780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561199357818101518382015260200161197b565b50505050905090810190601f1680156119c05780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156119e457600080fd5b505af11580156119f8573d6000803e3d6000fd5b505050506040513d6020811015611a0e57600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff166332ab6af06040805190810160405280600a81526020017f61706d2d656e73737562000000000000000000000000000000000000000000008152508d84600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ad56040805190810160405280600b81526020017f697066733a656e73737562000000000000000000000000000000000000000000815250612257565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff851660248201526004810190819060440185606080838360005b83811015611b47578181015183820152602001611b2f565b505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611bb9578181015183820152602001611ba1565b50505050905090810190601f168015611be65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611c19578181015183820152602001611c01565b50505050905090810190601f168015611c465780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b158015611c6a57600080fd5b505af1158015611c7e573d6000803e3d6000fd5b505050506040513d6020811015611c9457600080fd5b8101908080519060200190929190505050508373ffffffffffffffffffffffffffffffffffffffff166332ab6af06040805190810160405280600881526020017f61706d2d7265706f0000000000000000000000000000000000000000000000008152508d84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d5b6040805190810160405280600981526020017f697066733a7265706f0000000000000000000000000000000000000000000000815250612257565b6040517c010000000000000000000000000000000000000000000000000000000063ffffffff881602815273ffffffffffffffffffffffffffffffffffffffff851660248201526004810190819060440185606080838360005b83811015611dcd578181015183820152602001611db5565b505050509050018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611e3f578181015183820152602001611e27565b50505050905090810190601f168015611e6c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611e9f578181015183820152602001611e87565b50505050905090810190601f168015611ecc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b158015611ef057600080fd5b505af1158015611f04573d6000803e3d6000fd5b505050506040513d6020811015611f1a57600080fd5b50611f28905087858d61225a565b8673ffffffffffffffffffffffffffffffffffffffff1663afd925df8c8a8b73ffffffffffffffffffffffffffffffffffffffff16638ea8dc9d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611faa57600080fd5b505af1158015611fbe573d6000803e3d6000fd5b505050506040513d6020811015611fd457600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b5050604080517f9d0effdb00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8b1660248201819052604482018790529151919350639d0effdb925060648082019260009290919082900301818387803b1580156120e457600080fd5b505af11580156120f8573d6000803e3d6000fd5b5050604080517f0a8ed3db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301528b1660248201819052604482018790529151919350630a8ed3db925060648082019260009290919082900301818387803b15801561217b57600080fd5b505af115801561218f573d6000803e3d6000fd5b5050604080517fafd925df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301528b166024820181905260448201879052915191935063afd925df925060648082019260009290919082900301818387803b15801561221257600080fd5b505af1158015612226573d6000803e3d6000fd5b50959f9e505050505050505050505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b90565b8273ffffffffffffffffffffffffffffffffffffffff16630a8ed3db82848573ffffffffffffffffffffffffffffffffffffffff16635e1f3fa86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156122dc57600080fd5b505af11580156122f0573d6000803e3d6000fd5b505050506040513d602081101561230657600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b15801561238157600080fd5b505af1158015612395573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663afd925df82848573ffffffffffffffffffffffffffffffffffffffff16635e1f3fa86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561241b57600080fd5b505af115801561242f573d6000803e3d6000fd5b505050506040513d602081101561244557600080fd5b5051604080517c010000000000000000000000000000000000000000000000000000000063ffffffff871602815273ffffffffffffffffffffffffffffffffffffffff948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b1580156124c057600080fd5b505af11580156124d4573d6000803e3d6000fd5b50505050505050565b60606040519081016040528060039060208202803883395091929150505600a165627a7a72305820d62cb790dd501b722e4d61984299b42424673121e33f3bf73319b99abfd1651c0029",
  "sourceMap": "217:5158:40:-;;;1081:705;8:9:-1;5:2;;;30:1;27;20:12;5:2;1081:705:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1353:10;:24;;-1:-1:-1;;;;;;1353:24:40;;;-1:-1:-1;;;;;1353:24:40;;;;;;;;;;-1:-1:-1;1387:28:40;;;;;;;;;;1425:8;:20;;;;;;;;;;1455:25;:39;;;;;;;;;;;1081:705;;;;;;;1727:18;;;;:52;;1755:24;;;;;;1774:4;1755:24;;;;;;-1:-1:-1;;;;;1755:18:40;;;;;:24;;;;;;;;;;;;;;-1:-1:-1;1755:18:40;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;1755:24:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1755:24:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1755:24:40;1727:52;;;1748:4;1727:52;1721:3;:58;;-1:-1:-1;;;;;1721:58:40;;;;-1:-1:-1;;;;;;1721:58:40;;;;;;;;;-1:-1:-1;;;;;;217:5158:40;;;;;;",
  "deployedSourceMap": "217:5158:40:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;308:31:40;;;;;;;;;;;;;;;;;;;;;;;371:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;371:54:40;;;;431:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;431:14:40;;;;274:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;274:28:40;;;;2152:2823;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2152:2823:40;;;;;;;;;;;345:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;345:20:40;;;;308:31;;;;;;:::o;371:54::-;;;;;;:::o;431:14::-;;;;;;:::o;274:28::-;;;;;;:::o;2152:2823::-;2229:11;2252:12;2610:10;2656:7;2793:19;2837:28;3143:15;3448:17;3950:16;4188:29;;:::i;:::-;2294:4;2300:6;2277:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2277:30:40;;;2267:41;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;2267:41:40;;;;;;;;;;;;2360:3;;;:15;;;;;;;;;;;2267:41;;-1:-1:-1;2387:4:40;;-1:-1:-1;2360:32:40;:3;;;;-1:-1:-1;2360:9:40;;:15;;;;;-1:-1:-1;263:2;;2360:15:40;;;;;;;;-1:-1:-1;2360:3:40;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;2360:15:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2360:15:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2360:15:40;:32;;;2356:244;;2530:4;2503:32;;:3;;;;;;;;;;;:9;;;2513:4;2503:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2503:15:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2503:15:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2503:15:40;:32;;;2495:41;;;;;;2550:3;;;;;;;;;;;:19;;;2570:4;2576:6;2584:4;2550:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2550:39:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2550:39:40;;;;2356:244;2623:10;;;:23;;;;;;2641:4;2623:23;;;;;;:10;;;;;:17;;:23;;;;;;;;;;;;;;;;;:10;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;2623:23:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2623:23:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2623:23:40;2670:9;;;;;;;;2623:23;;-1:-1:-1;2670:7:40;;;;;;:9;;;;;2623:23;;2670:9;;;;;;;;;:7;:9;;;5:2:-1;;;;30:1;27;20:12;5:2;2670:9:40;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2670:9:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2670:9:40;2723:22;;;;;;;;2670:9;;-1:-1:-1;2691:20:40;;;;;;;2712:4;;2718:3;;2723:20;;;;;;:22;;;;;2670:9;;2723:22;;;;;;;;:20;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;2723:22:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2723:22:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2723:22:40;2691:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2747:4;2691:61;;;;;;;;;;;-1:-1:-1;;2691:61:40;;;;;;;-1:-1:-1;2691:61:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;2691:61:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2815:12:40;;;2825:1;2815:12;;2999:16;;;;;;2815:12;;;;2999:16;;;;;;;;;;2982:34;;2815:12;;-1:-1:-1;2903:18:40;;;;-1:-1:-1;2903:18:40;;-1:-1:-1;2966:4:40;;2815:12;;2982:34;;;;;;2999:16;;2982:34;2999:16;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2982:34:40;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2982:34:40;;;2972:45;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;2972:45:40;;;;;;;;;;;;2949:69;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;2949:69:40;;;;;;;;2939:80;;2949:69;;;;-1:-1:-1;2949:69:40;;-1:-1:-1;2939:80:40;;;;;-1:-1:-1;2939:80:40;2949:69;2939:80;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2939:80:40;;;;;;;;;;;;;;;;3037:25;;;;;;;;;;;3080:6;3104:5;2903:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2903:220:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2903:220:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2903:220:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2903:220:40;3282:12;;;;;;;;;;;;;2903:220;3282:12;;;;;;3265:30;;2903:220;;-1:-1:-1;3186:18:40;;;;;;3249:4;;3282:12;3265:30;;;;;3282:12;3265:30;3282:12;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3265:30:40;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3265:30:40;;;3255:41;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3255:41:40;;;;;;;;;;;;3232:65;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;3232:65:40;;;;;;;;3222:76;;3232:65;;;;-1:-1:-1;3232:65:40;;-1:-1:-1;3222:76:40;;;;;-1:-1:-1;3222:76:40;3232:65;3222:76;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3222:76:40;;;;;;;;;;;;;;;;3316:12;;;;;;;;;;;3346:6;3370:5;3186:203;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3186:203:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3186:203:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3186:203:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3186:203:40;3528:13;;;;;;;;;;;;;3186:203;3528:13;;;;;;3511:31;;3186:203;;-1:-1:-1;3495:4:40;;3528:13;;3511:31;;;;;;;3528:13;3511:31;3528:13;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3511:31:40;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3511:31:40;;;3501:42;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3501:42:40;;;;;;;;;;;;3478:66;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;3478:66:40;;;;;;;;3468:77;;3478:66;;;;-1:-1:-1;3478:66:40;;-1:-1:-1;3468:77:40;;;;;-1:-1:-1;3468:77:40;3478:66;3468:77;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;246:30;;311:9;;295:26;;;340:21;;377:20;365:33;;3468:77:40;;;;;;;;;;;;3566:25;;;;;3468:77;;-1:-1:-1;3555:10:40;;;;-1:-1:-1;3555:10:40;;-1:-1:-1;3555:10:40;;3566:23;;-1:-1:-1;3566:25:40;;;;;;;;;;-1:-1:-1;3555:10:40;3566:25;;;5:2:-1;;;;30:1;27;20:12;5:2;3566:25:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3566:25:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3566:25:40;3604:8;;3555:58;;;;;;;;;;;;;;;;;;;;;;;3604:8;;;;3555:58;;;;;;;;;;3604:8;;3555:58;;;;;;;3604:8;3555:58;;;;5:2:-1;;;;30:1;27;20:12;5:2;3555:58:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;3629:20:40;;;;;;;;;;3639:4;;-1:-1:-1;3629:20:40;;-1:-1:-1;3629:20:40;;;;;;;;3729:3;:20;;;3750:3;3755:6;3763;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3763:25:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3763:25:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3763:25:40;3729:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3729:67:40;;;;;;;-1:-1:-1;3729:67:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;3729:67:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3729:67:40;;;;3806:3;:20;;;3827:3;3832:6;3840;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3840:28:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3840:28:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3840:28:40;3806:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3806:70:40;;;;;;;-1:-1:-1;3806:70:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;3806:70:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3806:70:40;;;;3969:3;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3969:29:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3969:29:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3969:29:40;4009:39;;;;;;:19;:39;;;;;;;:19;;:39;;;;;;;;;;;;;;3969:29;;-1:-1:-1;4009:19:40;;;;:39;;;;;-1:-1:-1;;4009:39:40;;;;;;;;-1:-1:-1;4009:19:40;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;4009:39:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4081:3:40;;;:26;;;;;;;;;;;;:3;:26;;;;;;;;;:3;;;-1:-1:-1;4081:12:40;;-1:-1:-1;4081:26:40;;;;;:3;;:26;;;;;;;:3;;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;4081:26:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4135:3:40;;;4117:28;;;;;;:17;4135:3;;;4117:28;;;;;;;;;;;;;;:17;;;;-1:-1:-1;4117:17:40;;-1:-1:-1;4117:28:40;;;;;4135:3;;4117:28;;;;;;;4135:3;4117:17;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;4117:28:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4117:28:40;;;;4155:3;:14;;;4170:6;4155:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4155:22:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4245:1:40;4227:19;;-1:-1:-1;;4289:22:40;;;;;;;;4257:20;;;;;;;4278:4;;4284:3;;4289:20;;;;;;:22;;;;;4227:15;;4289:22;;;;;;;;4240:1;4289:20;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;4289:22:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4289:22:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4289:22:40;4257:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4313:4;4257:61;;;;;;;;;;;-1:-1:-1;;4257:61:40;;;;;;;-1:-1:-1;4257:61:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;4257:61:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4257:61:40;;;;4329:3;:22;;;4352:12;;;;;;;;;;;;;;;;;;4366:5;4373:12;4387;;;;;;;;;;;4401:13;;;;;;;;;;;;;;;;;;;:1;:13::i;:::-;4329:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4329:86:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4329:86:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4329:86:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4329:86:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4329:86:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4329:86:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4329:86:40;;;;;;;;;;;;;;;;;4425:3;:22;;;4448:16;;;;;;;;;;;;;;;;;;4466:5;4473:12;4487:25;;;;;;;;;;;4514:16;;;;;;;;;;;;;;;;;;;:1;:16::i;:::-;4425:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4425:106:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4425:106:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4425:106:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4425:106:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4425:106:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4425:106:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4425:106:40;;;;;;;;;;;;;;;;;4541:3;:22;;;4564:13;;;;;;;;;;;;;;;;;;4579:5;4586:12;4600:8;;;;;;;;;;;4610:14;;;;;;;;;;;;;;;;;;;:1;:14::i;:::-;4541:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4541:84:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4541:84:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4541:84:40;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4541:84:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4541:84:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4541:84:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4636:40:40;;-1:-1:-1;4660:3:40;4665;4670:5;4636:23;:40::i;:::-;4729:3;:24;;;4754:5;4761:3;4766;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4766:22:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4766:22:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4766:22:40;4729:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4729:60:40;;;;;;;-1:-1:-1;4729:60:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;4729:60:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4799:41:40;;;;;;4820:4;4799:41;;;;:20;;;:41;;;;;;;;;;;;;;:20;;-1:-1:-1;4799:20:40;;-1:-1:-1;4799:41:40;;;;;-1:-1:-1;;4799:41:40;;;;;;;;-1:-1:-1;4799:20:40;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;4799:41:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4850:41:40;;;;;;:19;:41;;;;;;;:19;;:41;;;;;;;;;;;;;;:19;;-1:-1:-1;4850:19:40;;-1:-1:-1;4850:41:40;;;;;-1:-1:-1;;4850:41:40;;;;;;;;-1:-1:-1;4850:19:40;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;4850:41:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;4901:46:40;;;;;;:24;:46;;;;;;;:24;;:46;;;;;;;;;;;;;;:24;;-1:-1:-1;4901:24:40;;-1:-1:-1;4901:46:40;;;;;-1:-1:-1;;4901:46:40;;;;;;;;-1:-1:-1;4901:24:40;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;4901:46:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;4965:3:40;;2152:2823;-1:-1:-1;;;;;;;;;;;;;;;2152:2823:40:o;345:20::-;;;;;;:::o;4981:96::-;5068:1;4981:96::o;5140:233::-;5235:4;:20;;;5256:5;5263:4;5269;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5269:23:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5269:23:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5269:23:40;5235:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5235:58:40;;;;;;;-1:-1:-1;5235:58:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;5235:58:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5235:58:40;;;;5303:4;:25;;;5329:5;5336:4;5342;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5342:23:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5342:23:40;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5342:23:40;5303:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5303:63:40;;;;;;;-1:-1:-1;5303:63:40;;;;5:2:-1;;;;30:1;27;20:12;5:2;5303:63:40;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5303:63:40;;;;5140:233;;;:::o;217:5158::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;217:5158:40;;;-1:-1:-1;;217:5158:40:o",
  "source": "pragma solidity 0.4.24;\n\n\nimport \"../apm/APMRegistry.sol\";\nimport \"../apm/Repo.sol\";\nimport \"../ens/ENSSubdomainRegistrar.sol\";\n\nimport \"./DAOFactory.sol\";\nimport \"./ENSFactory.sol\";\nimport \"./AppProxyFactory.sol\";\n\n\ncontract APMRegistryFactory is APMInternalAppNames {\n    DAOFactory public daoFactory;\n    APMRegistry public registryBase;\n    Repo public repoBase;\n    ENSSubdomainRegistrar public ensSubdomainRegistrarBase;\n    ENS public ens;\n\n    event DeployAPM(bytes32 indexed node, address apm);\n\n    /**\n    * @notice Create a new factory for deploying Aragon Package Managers (aragonPM)\n    * @dev Requires either a given ENS registrar or ENSFactory (used for generating a new ENS in test environments).\n    * @param _daoFactory Base factory for deploying DAOs\n    * @param _registryBase APMRegistry base contract location\n    * @param _repoBase Repo base contract location\n    * @param _ensSubBase ENSSubdomainRegistrar base contract location\n    * @param _ens ENS instance\n    * @param _ensFactory ENSFactory (used to generated a new ENS if no ENS is given)\n    */\n    constructor(\n        DAOFactory _daoFactory,\n        APMRegistry _registryBase,\n        Repo _repoBase,\n        ENSSubdomainRegistrar _ensSubBase,\n        ENS _ens,\n        ENSFactory _ensFactory\n    ) public // DAO initialized without evmscript run support\n    {\n        daoFactory = _daoFactory;\n        registryBase = _registryBase;\n        repoBase = _repoBase;\n        ensSubdomainRegistrarBase = _ensSubBase;\n\n        // Either the ENS address provided is used, if any.\n        // Or we use the ENSFactory to generate a test instance of ENS\n        // If not the ENS address nor factory address are provided, this will revert\n        ens = _ens != address(0) ? _ens : _ensFactory.newENS(this);\n    }\n\n    /**\n    * @notice Create a new Aragon Package Manager (aragonPM) DAO, holding the `_label` subdomain from parent `_tld` and controlled by `_root`\n    * @param _tld The parent node of the controlled subdomain\n    * @param _label The subdomain label\n    * @param _root Manager for the new aragonPM DAO\n    * @return The new aragonPM's APMRegistry app\n    */\n    function newAPM(bytes32 _tld, bytes32 _label, address _root) public returns (APMRegistry) {\n        bytes32 node = keccak256(abi.encodePacked(_tld, _label));\n\n        // Assume it is the test ENS\n        if (ens.owner(node) != address(this)) {\n            // If we weren't in test ens and factory doesn't have ownership, will fail\n            require(ens.owner(_tld) == address(this));\n            ens.setSubnodeOwner(_tld, _label, this);\n        }\n\n        Kernel dao = daoFactory.newDAO(this);\n        ACL acl = ACL(dao.acl());\n\n        acl.createPermission(this, dao, dao.APP_MANAGER_ROLE(), this);\n\n        // Deploy app proxies\n        bytes memory noInit = new bytes(0);\n        ENSSubdomainRegistrar ensSub = ENSSubdomainRegistrar(\n            dao.newAppInstance(\n                keccak256(abi.encodePacked(node, keccak256(abi.encodePacked(ENS_SUB_APP_NAME)))),\n                ensSubdomainRegistrarBase,\n                noInit,\n                false\n            )\n        );\n        APMRegistry apm = APMRegistry(\n            dao.newAppInstance(\n                keccak256(abi.encodePacked(node, keccak256(abi.encodePacked(APM_APP_NAME)))),\n                registryBase,\n                noInit,\n                false\n            )\n        );\n\n        // APMRegistry controls Repos\n        bytes32 repoAppId = keccak256(abi.encodePacked(node, keccak256(abi.encodePacked(REPO_APP_NAME))));\n        dao.setApp(dao.APP_BASES_NAMESPACE(), repoAppId, repoBase);\n\n        emit DeployAPM(node, apm);\n\n        // Grant permissions needed for APM on ENSSubdomainRegistrar\n        acl.createPermission(apm, ensSub, ensSub.CREATE_NAME_ROLE(), _root);\n        acl.createPermission(apm, ensSub, ensSub.POINT_ROOTNODE_ROLE(), _root);\n\n        // allow apm to create permissions for Repos in Kernel\n        bytes32 permRole = acl.CREATE_PERMISSIONS_ROLE();\n\n        acl.grantPermission(apm, acl, permRole);\n\n        // Initialize\n        ens.setOwner(node, ensSub);\n        ensSub.initialize(ens, node);\n        apm.initialize(ensSub);\n\n        uint16[3] memory firstVersion;\n        firstVersion[0] = 1;\n\n        acl.createPermission(this, apm, apm.CREATE_REPO_ROLE(), this);\n\n        apm.newRepoWithVersion(APM_APP_NAME, _root, firstVersion, registryBase, b(\"ipfs:apm\"));\n        apm.newRepoWithVersion(ENS_SUB_APP_NAME, _root, firstVersion, ensSubdomainRegistrarBase, b(\"ipfs:enssub\"));\n        apm.newRepoWithVersion(REPO_APP_NAME, _root, firstVersion, repoBase, b(\"ipfs:repo\"));\n\n        configureAPMPermissions(acl, apm, _root);\n\n        // Permission transition to _root\n        acl.setPermissionManager(_root, dao, dao.APP_MANAGER_ROLE());\n        acl.revokePermission(this, acl, permRole);\n        acl.grantPermission(_root, acl, permRole);\n        acl.setPermissionManager(_root, acl, permRole);\n\n        return apm;\n    }\n\n    function b(string memory x) internal pure returns (bytes memory y) {\n        y = bytes(x);\n    }\n\n    // Factory can be subclassed and permissions changed\n    function configureAPMPermissions(ACL _acl, APMRegistry _apm, address _root) internal {\n        _acl.grantPermission(_root, _apm, _apm.CREATE_REPO_ROLE());\n        _acl.setPermissionManager(_root, _apm, _apm.CREATE_REPO_ROLE());\n    }\n}\n",
  "sourcePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/APMRegistryFactory.sol",
  "ast": {
    "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/APMRegistryFactory.sol",
    "exportedSymbols": {
      "APMRegistryFactory": [
        5371
      ]
    },
    "id": 5372,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4939,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/apm/APMRegistry.sol",
        "file": "../apm/APMRegistry.sol",
        "id": 4940,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 2164,
        "src": "26:32:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/apm/Repo.sol",
        "file": "../apm/Repo.sol",
        "id": 4941,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 2557,
        "src": "59:25:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/ens/ENSSubdomainRegistrar.sol",
        "file": "../ens/ENSSubdomainRegistrar.sol",
        "id": 4942,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 4234,
        "src": "85:42:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/DAOFactory.sol",
        "file": "./DAOFactory.sol",
        "id": 4943,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 5685,
        "src": "129:26:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/ENSFactory.sol",
        "file": "./ENSFactory.sol",
        "id": 4944,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 5768,
        "src": "156:26:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/AppProxyFactory.sol",
        "file": "./AppProxyFactory.sol",
        "id": 4945,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 5485,
        "src": "183:31:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4946,
              "name": "APMInternalAppNames",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1876,
              "src": "248:19:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_APMInternalAppNames_$1876",
                "typeString": "contract APMInternalAppNames"
              }
            },
            "id": 4947,
            "nodeType": "InheritanceSpecifier",
            "src": "248:19:40"
          }
        ],
        "contractDependencies": [
          1876
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5371,
        "linearizedBaseContracts": [
          5371,
          1876
        ],
        "name": "APMRegistryFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4949,
            "name": "daoFactory",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "274:28:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOFactory_$5684",
              "typeString": "contract DAOFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 4948,
              "name": "DAOFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5684,
              "src": "274:10:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOFactory_$5684",
                "typeString": "contract DAOFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4951,
            "name": "registryBase",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "308:31:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_APMRegistry_$2163",
              "typeString": "contract APMRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 4950,
              "name": "APMRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2163,
              "src": "308:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_APMRegistry_$2163",
                "typeString": "contract APMRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4953,
            "name": "repoBase",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "345:20:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Repo_$2556",
              "typeString": "contract Repo"
            },
            "typeName": {
              "contractScope": null,
              "id": 4952,
              "name": "Repo",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2556,
              "src": "345:4:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Repo_$2556",
                "typeString": "contract Repo"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4955,
            "name": "ensSubdomainRegistrarBase",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "371:54:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
              "typeString": "contract ENSSubdomainRegistrar"
            },
            "typeName": {
              "contractScope": null,
              "id": 4954,
              "name": "ENSSubdomainRegistrar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4233,
              "src": "371:21:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                "typeString": "contract ENSSubdomainRegistrar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4957,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "431:14:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$6785",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 4956,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6785,
              "src": "431:3:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$6785",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4963,
            "name": "DeployAPM",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4959,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 4963,
                  "src": "468:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4958,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "468:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4961,
                  "indexed": false,
                  "name": "apm",
                  "nodeType": "VariableDeclaration",
                  "scope": 4963,
                  "src": "490:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4960,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "490:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "467:35:40"
            },
            "src": "452:51:40"
          },
          {
            "body": {
              "id": 5008,
              "nodeType": "Block",
              "src": "1343:443:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4978,
                      "name": "daoFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4949,
                      "src": "1353:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOFactory_$5684",
                        "typeString": "contract DAOFactory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4979,
                      "name": "_daoFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4965,
                      "src": "1366:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOFactory_$5684",
                        "typeString": "contract DAOFactory"
                      }
                    },
                    "src": "1353:24:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$5684",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  "id": 4981,
                  "nodeType": "ExpressionStatement",
                  "src": "1353:24:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4982,
                      "name": "registryBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4951,
                      "src": "1387:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_APMRegistry_$2163",
                        "typeString": "contract APMRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4983,
                      "name": "_registryBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4967,
                      "src": "1402:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_APMRegistry_$2163",
                        "typeString": "contract APMRegistry"
                      }
                    },
                    "src": "1387:28:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "id": 4985,
                  "nodeType": "ExpressionStatement",
                  "src": "1387:28:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4986,
                      "name": "repoBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4953,
                      "src": "1425:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Repo_$2556",
                        "typeString": "contract Repo"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4987,
                      "name": "_repoBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4969,
                      "src": "1436:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Repo_$2556",
                        "typeString": "contract Repo"
                      }
                    },
                    "src": "1425:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 4989,
                  "nodeType": "ExpressionStatement",
                  "src": "1425:20:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4990,
                      "name": "ensSubdomainRegistrarBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4955,
                      "src": "1455:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                        "typeString": "contract ENSSubdomainRegistrar"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4991,
                      "name": "_ensSubBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4971,
                      "src": "1483:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                        "typeString": "contract ENSSubdomainRegistrar"
                      }
                    },
                    "src": "1455:39:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                      "typeString": "contract ENSSubdomainRegistrar"
                    }
                  },
                  "id": 4993,
                  "nodeType": "ExpressionStatement",
                  "src": "1455:39:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4994,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4957,
                      "src": "1721:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$6785",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4995,
                          "name": "_ens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4973,
                          "src": "1727:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ENS_$6785",
                            "typeString": "contract ENS"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4997,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1743:1:40",
                              "subdenomination": null,
                              "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": 4996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1735:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1735:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1727:18:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5003,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16564,
                            "src": "1774:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                              "typeString": "contract APMRegistryFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                              "typeString": "contract APMRegistryFactory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5001,
                            "name": "_ensFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4975,
                            "src": "1755:11:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSFactory_$5767",
                              "typeString": "contract ENSFactory"
                            }
                          },
                          "id": 5002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newENS",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5766,
                          "src": "1755:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_contract$_ENS_$6785_$",
                            "typeString": "function (address) external returns (contract ENS)"
                          }
                        },
                        "id": 5004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1755:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 5005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "1727:52:40",
                      "trueExpression": {
                        "argumentTypes": null,
                        "id": 5000,
                        "name": "_ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "1748:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$6785",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "1721:58:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$6785",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 5007,
                  "nodeType": "ExpressionStatement",
                  "src": "1721:58:40"
                }
              ]
            },
            "documentation": "@notice Create a new factory for deploying Aragon Package Managers (aragonPM)\n@dev Requires either a given ENS registrar or ENSFactory (used for generating a new ENS in test environments).\n@param _daoFactory Base factory for deploying DAOs\n@param _registryBase APMRegistry base contract location\n@param _repoBase Repo base contract location\n@param _ensSubBase ENSSubdomainRegistrar base contract location\n@param _ens ENS instance\n@param _ensFactory ENSFactory (used to generated a new ENS if no ENS is given)",
            "id": 5009,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4965,
                  "name": "_daoFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1102:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DAOFactory_$5684",
                    "typeString": "contract DAOFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4964,
                    "name": "DAOFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5684,
                    "src": "1102:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$5684",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4967,
                  "name": "_registryBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1134:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_APMRegistry_$2163",
                    "typeString": "contract APMRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4966,
                    "name": "APMRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2163,
                    "src": "1134:11:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4969,
                  "name": "_repoBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1169:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Repo_$2556",
                    "typeString": "contract Repo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4968,
                    "name": "Repo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2556,
                    "src": "1169:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4971,
                  "name": "_ensSubBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1193:33:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                    "typeString": "contract ENSSubdomainRegistrar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4970,
                    "name": "ENSSubdomainRegistrar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4233,
                    "src": "1193:21:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                      "typeString": "contract ENSSubdomainRegistrar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4973,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1236:8:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$6785",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4972,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6785,
                    "src": "1236:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$6785",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4975,
                  "name": "_ensFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1254:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENSFactory_$5767",
                    "typeString": "contract ENSFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4974,
                    "name": "ENSFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5767,
                    "src": "1254:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSFactory_$5767",
                      "typeString": "contract ENSFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1092:190:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 4977,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1343:0:40"
            },
            "scope": 5371,
            "src": "1081:705:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5325,
              "nodeType": "Block",
              "src": "2242:2733:40",
              "statements": [
                {
                  "assignments": [
                    5021
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5021,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2252:12:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5020,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2252:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5029,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5025,
                            "name": "_tld",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5011,
                            "src": "2294:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5026,
                            "name": "_label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5013,
                            "src": "2300:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5023,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16420,
                            "src": "2277:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2277:16:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2277:30:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5022,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16427,
                      "src": "2267:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 5028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2267:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2252:56:40"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5032,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5021,
                          "src": "2370:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5030,
                          "name": "ens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4957,
                          "src": "2360:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ENS_$6785",
                            "typeString": "contract ENS"
                          }
                        },
                        "id": 5031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6657,
                        "src": "2360:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32) view external returns (address)"
                        }
                      },
                      "id": 5033,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2360:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5035,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16564,
                          "src": "2387:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                            "typeString": "contract APMRegistryFactory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                            "typeString": "contract APMRegistryFactory"
                          }
                        ],
                        "id": 5034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2379:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 5036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2379:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2360:32:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5058,
                  "nodeType": "IfStatement",
                  "src": "2356:244:40",
                  "trueBody": {
                    "id": 5057,
                    "nodeType": "Block",
                    "src": "2394:206:40",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5046,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5041,
                                    "name": "_tld",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5011,
                                    "src": "2513:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5039,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4957,
                                    "src": "2503:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$6785",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 5040,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6657,
                                  "src": "2503:9:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                    "typeString": "function (bytes32) view external returns (address)"
                                  }
                                },
                                "id": 5042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2503:15:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5044,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16564,
                                    "src": "2530:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                      "typeString": "contract APMRegistryFactory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                      "typeString": "contract APMRegistryFactory"
                                    }
                                  ],
                                  "id": 5043,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2522:7:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 5045,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2522:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2503:32:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5038,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16436,
                              16437
                            ],
                            "referencedDeclaration": 16436,
                            "src": "2495:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5047,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2495:41:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5048,
                        "nodeType": "ExpressionStatement",
                        "src": "2495:41:40"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5052,
                              "name": "_tld",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5011,
                              "src": "2570:4:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5053,
                              "name": "_label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5013,
                              "src": "2576:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5054,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16564,
                              "src": "2584:4:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                "typeString": "contract APMRegistryFactory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                "typeString": "contract APMRegistryFactory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5049,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4957,
                              "src": "2550:3:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$6785",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 5051,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6738,
                            "src": "2550:19:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 5055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2550:39:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5056,
                        "nodeType": "ExpressionStatement",
                        "src": "2550:39:40"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5060
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5060,
                      "name": "dao",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2610:10:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Kernel_$6420",
                        "typeString": "contract Kernel"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5059,
                        "name": "Kernel",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6420,
                        "src": "2610:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5065,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5063,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "2641:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5061,
                        "name": "daoFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4949,
                        "src": "2623:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOFactory_$5684",
                          "typeString": "contract DAOFactory"
                        }
                      },
                      "id": 5062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newDAO",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5683,
                      "src": "2623:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_contract$_Kernel_$6420_$",
                        "typeString": "function (address) external returns (contract Kernel)"
                      }
                    },
                    "id": 5064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2623:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Kernel_$6420",
                      "typeString": "contract Kernel"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2610:36:40"
                },
                {
                  "assignments": [
                    5067
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5067,
                      "name": "acl",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2656:7:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ACL_$1294",
                        "typeString": "contract ACL"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5066,
                        "name": "ACL",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1294,
                        "src": "2656:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5073,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5069,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "2670:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "acl",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6290,
                          "src": "2670:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IACL_$1815_$",
                            "typeString": "function () view external returns (contract IACL)"
                          }
                        },
                        "id": 5071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2670:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACL_$1815",
                          "typeString": "contract IACL"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IACL_$1815",
                          "typeString": "contract IACL"
                        }
                      ],
                      "id": 5068,
                      "name": "ACL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1294,
                      "src": "2666:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ACL_$1294_$",
                        "typeString": "type(contract ACL)"
                      }
                    },
                    "id": 5072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2666:14:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ACL_$1294",
                      "typeString": "contract ACL"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2656:24:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5077,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "2712:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5078,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5060,
                        "src": "2718:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5079,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "2723:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5962,
                          "src": "2723:20:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2723:22:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5082,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "2747:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5074,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "2691:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5076,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "2691:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2691:61:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5084,
                  "nodeType": "ExpressionStatement",
                  "src": "2691:61:40"
                },
                {
                  "assignments": [
                    5086
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5086,
                      "name": "noInit",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2793:19:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5085,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2793:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5091,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2825:1:40",
                        "subdenomination": null,
                        "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": 5088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2815:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 5087,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2819:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 5090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2815:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2793:34:40"
                },
                {
                  "assignments": [
                    5093
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5093,
                      "name": "ensSub",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2837:28:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                        "typeString": "contract ENSSubdomainRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5092,
                        "name": "ENSSubdomainRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4233,
                        "src": "2837:21:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5114,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5100,
                                    "name": "node",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5021,
                                    "src": "2966:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5104,
                                            "name": "ENS_SUB_APP_NAME",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1875,
                                            "src": "2999:16:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 5102,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16420,
                                            "src": "2982:3:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 5103,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "2982:16:40",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 5105,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2982:34:40",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 5101,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 16427,
                                      "src": "2972:9:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                        "typeString": "function () pure returns (bytes32)"
                                      }
                                    },
                                    "id": 5106,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2972:45:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5098,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16420,
                                    "src": "2949:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2949:16:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2949:69:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5097,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16427,
                              "src": "2939:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 5108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2939:80:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5109,
                            "name": "ensSubdomainRegistrarBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4955,
                            "src": "3037:25:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5110,
                            "name": "noInit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5086,
                            "src": "3080:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 5111,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3104:5:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5095,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "2903:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6098,
                          "src": "2903:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_contract$_ERCProxy_$7766_$",
                            "typeString": "function (bytes32,address,bytes memory,bool) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 5112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2903:220:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 5094,
                      "name": "ENSSubdomainRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4233,
                      "src": "2868:21:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ENSSubdomainRegistrar_$4233_$",
                        "typeString": "type(contract ENSSubdomainRegistrar)"
                      }
                    },
                    "id": 5113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2868:265:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                      "typeString": "contract ENSSubdomainRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2837:296:40"
                },
                {
                  "assignments": [
                    5116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5116,
                      "name": "apm",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "3143:15:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_APMRegistry_$2163",
                        "typeString": "contract APMRegistry"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5115,
                        "name": "APMRegistry",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2163,
                        "src": "3143:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5137,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5123,
                                    "name": "node",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5021,
                                    "src": "3249:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5127,
                                            "name": "APM_APP_NAME",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1869,
                                            "src": "3282:12:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 5125,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16420,
                                            "src": "3265:3:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 5126,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "3265:16:40",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 5128,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3265:30:40",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 5124,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 16427,
                                      "src": "3255:9:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                        "typeString": "function () pure returns (bytes32)"
                                      }
                                    },
                                    "id": 5129,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3255:41:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5121,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16420,
                                    "src": "3232:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5122,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3232:16:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3232:65:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5120,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16427,
                              "src": "3222:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 5131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3222:76:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5132,
                            "name": "registryBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4951,
                            "src": "3316:12:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5133,
                            "name": "noInit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5086,
                            "src": "3346:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 5134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3370:5:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5118,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "3186:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6098,
                          "src": "3186:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_contract$_ERCProxy_$7766_$",
                            "typeString": "function (bytes32,address,bytes memory,bool) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 5135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3186:203:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 5117,
                      "name": "APMRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2163,
                      "src": "3161:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_APMRegistry_$2163_$",
                        "typeString": "type(contract APMRegistry)"
                      }
                    },
                    "id": 5136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3161:238:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3143:256:40"
                },
                {
                  "assignments": [
                    5139
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5139,
                      "name": "repoAppId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "3448:17:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5138,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3448:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5152,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5143,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5021,
                            "src": "3495:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5147,
                                    "name": "REPO_APP_NAME",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1872,
                                    "src": "3528:13:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5145,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16420,
                                    "src": "3511:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5146,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3511:16:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5148,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3511:31:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5144,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16427,
                              "src": "3501:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 5149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3501:42:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5141,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16420,
                            "src": "3478:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3478:16:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5150,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3478:66:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5140,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16427,
                      "src": "3468:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 5151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3468:77:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3448:97:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5156,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "3566:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_BASES_NAMESPACE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6225,
                          "src": "3566:23:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure external returns (bytes32)"
                          }
                        },
                        "id": 5158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3566:25:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5159,
                        "name": "repoAppId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5139,
                        "src": "3593:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5160,
                        "name": "repoBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4953,
                        "src": "3604:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5153,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5060,
                        "src": "3555:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      "id": 5155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setApp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6192,
                      "src": "3555:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address) external"
                      }
                    },
                    "id": 5161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3555:58:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5162,
                  "nodeType": "ExpressionStatement",
                  "src": "3555:58:40"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5164,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5021,
                        "src": "3639:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5165,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "3645:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      ],
                      "id": 5163,
                      "name": "DeployAPM",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "3629:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 5166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3629:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5167,
                  "nodeType": "EmitStatement",
                  "src": "3624:25:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5171,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "3750:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5172,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "3755:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5173,
                            "name": "ensSub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5093,
                            "src": "3763:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            }
                          },
                          "id": 5174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_NAME_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3932,
                          "src": "3763:23:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3763:25:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5176,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "3790:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5168,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "3729:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "3729:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3729:67:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5178,
                  "nodeType": "ExpressionStatement",
                  "src": "3729:67:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5182,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "3827:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5183,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "3832:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5184,
                            "name": "ensSub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5093,
                            "src": "3840:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            }
                          },
                          "id": 5185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "POINT_ROOTNODE_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3938,
                          "src": "3840:26:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3840:28:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5187,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "3870:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5179,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "3806:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "3806:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3806:70:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5189,
                  "nodeType": "ExpressionStatement",
                  "src": "3806:70:40"
                },
                {
                  "assignments": [
                    5191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5191,
                      "name": "permRole",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "3950:16:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5190,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3950:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5195,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5192,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "3969:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "CREATE_PERMISSIONS_ROLE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18,
                      "src": "3969:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view external returns (bytes32)"
                      }
                    },
                    "id": 5194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3969:29:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3950:48:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5199,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4029:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5200,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4034:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5201,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4039:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5196,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4009:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 241,
                      "src": "4009:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4009:39:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5203,
                  "nodeType": "ExpressionStatement",
                  "src": "4009:39:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5207,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5021,
                        "src": "4094:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5208,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "4100:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5204,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4957,
                        "src": "4081:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 5206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6706,
                      "src": "4081:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 5209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4081:26:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5210,
                  "nodeType": "ExpressionStatement",
                  "src": "4081:26:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5214,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4957,
                        "src": "4135:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5215,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5021,
                        "src": "4140:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5211,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "4117:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      "id": 5213,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3996,
                      "src": "4117:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_AbstractENS_$6601_$_t_bytes32_$returns$__$",
                        "typeString": "function (contract AbstractENS,bytes32) external"
                      }
                    },
                    "id": 5216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4117:28:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5217,
                  "nodeType": "ExpressionStatement",
                  "src": "4117:28:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5221,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "4170:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5218,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4155:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1963,
                      "src": "4155:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ENSSubdomainRegistrar_$4233_$returns$__$",
                        "typeString": "function (contract ENSSubdomainRegistrar) external"
                      }
                    },
                    "id": 5222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4155:22:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5223,
                  "nodeType": "ExpressionStatement",
                  "src": "4155:22:40"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5228,
                      "name": "firstVersion",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "4188:29:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                        "typeString": "uint16[3]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5226,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4188:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 5227,
                        "length": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 5225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4195:1:40",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          },
                          "value": "3"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "4188:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_storage_ptr",
                          "typeString": "uint16[3]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5229,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4188:29:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5230,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4227:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      "id": 5232,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4240:1:40",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4227:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4245:1:40",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "4227:19:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 5235,
                  "nodeType": "ExpressionStatement",
                  "src": "4227:19:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5239,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "4278:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5240,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4284:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5241,
                            "name": "apm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5116,
                            "src": "4289:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          "id": 5242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_REPO_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1885,
                          "src": "4289:20:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4289:22:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5244,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "4313:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5236,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4257:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "4257:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4257:61:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5246,
                  "nodeType": "ExpressionStatement",
                  "src": "4257:61:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5250,
                        "name": "APM_APP_NAME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1869,
                        "src": "4352:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5251,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4366:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5252,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4373:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5253,
                        "name": "registryBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4951,
                        "src": "4387:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "697066733a61706d",
                            "id": 5255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4403:10:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_bd519e9468823d7fd2951ca90a412c420218a9c6cae3c0013f571decac044ab0",
                              "typeString": "literal_string \"ipfs:apm\""
                            },
                            "value": "ipfs:apm"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_bd519e9468823d7fd2951ca90a412c420218a9c6cae3c0013f571decac044ab0",
                              "typeString": "literal_string \"ipfs:apm\""
                            }
                          ],
                          "id": 5254,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5340,
                          "src": "4401:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 5256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4401:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5247,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4329:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newRepoWithVersion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "4329:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Repo_$2556_$",
                        "typeString": "function (string memory,address,uint16[3] memory,address,bytes memory) external returns (contract Repo)"
                      }
                    },
                    "id": 5257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4329:86:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 5258,
                  "nodeType": "ExpressionStatement",
                  "src": "4329:86:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5262,
                        "name": "ENS_SUB_APP_NAME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1875,
                        "src": "4448:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5263,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4466:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5264,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4473:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5265,
                        "name": "ensSubdomainRegistrarBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4955,
                        "src": "4487:25:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "697066733a656e73737562",
                            "id": 5267,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4516:13:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_40e9f415690a155a4d25684a7502b118cee0b74bb8c46f947331f8e0ab927857",
                              "typeString": "literal_string \"ipfs:enssub\""
                            },
                            "value": "ipfs:enssub"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_40e9f415690a155a4d25684a7502b118cee0b74bb8c46f947331f8e0ab927857",
                              "typeString": "literal_string \"ipfs:enssub\""
                            }
                          ],
                          "id": 5266,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5340,
                          "src": "4514:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 5268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4514:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5259,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4425:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newRepoWithVersion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "4425:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Repo_$2556_$",
                        "typeString": "function (string memory,address,uint16[3] memory,address,bytes memory) external returns (contract Repo)"
                      }
                    },
                    "id": 5269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4425:106:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 5270,
                  "nodeType": "ExpressionStatement",
                  "src": "4425:106:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5274,
                        "name": "REPO_APP_NAME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "4564:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5275,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4579:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5276,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4586:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5277,
                        "name": "repoBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4953,
                        "src": "4600:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "697066733a7265706f",
                            "id": 5279,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4612:11:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_48cc521ec21e9d8c7d46de750cc52d64e5a87b969982c6994e87bd988c7ea604",
                              "typeString": "literal_string \"ipfs:repo\""
                            },
                            "value": "ipfs:repo"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_48cc521ec21e9d8c7d46de750cc52d64e5a87b969982c6994e87bd988c7ea604",
                              "typeString": "literal_string \"ipfs:repo\""
                            }
                          ],
                          "id": 5278,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5340,
                          "src": "4610:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 5280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4610:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5271,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4541:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5273,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newRepoWithVersion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "4541:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Repo_$2556_$",
                        "typeString": "function (string memory,address,uint16[3] memory,address,bytes memory) external returns (contract Repo)"
                      }
                    },
                    "id": 5281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4541:84:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 5282,
                  "nodeType": "ExpressionStatement",
                  "src": "4541:84:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5284,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4660:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5285,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4665:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5286,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4670:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5283,
                      "name": "configureAPMPermissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5370,
                      "src": "4636:23:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ACL_$1294_$_t_contract$_APMRegistry_$2163_$_t_address_$returns$__$",
                        "typeString": "function (contract ACL,contract APMRegistry,address)"
                      }
                    },
                    "id": 5287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4636:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5288,
                  "nodeType": "ExpressionStatement",
                  "src": "4636:40:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5292,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4754:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5293,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5060,
                        "src": "4761:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5294,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "4766:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5962,
                          "src": "4766:20:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4766:22:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5289,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4729:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 318,
                      "src": "4729:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4729:60:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5298,
                  "nodeType": "ExpressionStatement",
                  "src": "4729:60:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5302,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "4820:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5303,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4826:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5304,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4831:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5299,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4799:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokePermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 298,
                      "src": "4799:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4799:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5306,
                  "nodeType": "ExpressionStatement",
                  "src": "4799:41:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5310,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4870:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5311,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4877:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5312,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4882:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5307,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4850:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5309,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 241,
                      "src": "4850:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4850:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5314,
                  "nodeType": "ExpressionStatement",
                  "src": "4850:41:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5318,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4926:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5319,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4933:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5320,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4938:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5315,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4901:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 318,
                      "src": "4901:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4901:46:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5322,
                  "nodeType": "ExpressionStatement",
                  "src": "4901:46:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5323,
                    "name": "apm",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5116,
                    "src": "4965:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "functionReturnParameters": 5019,
                  "id": 5324,
                  "nodeType": "Return",
                  "src": "4958:10:40"
                }
              ]
            },
            "documentation": "@notice Create a new Aragon Package Manager (aragonPM) DAO, holding the `_label` subdomain from parent `_tld` and controlled by `_root`\n@param _tld The parent node of the controlled subdomain\n@param _label The subdomain label\n@param _root Manager for the new aragonPM DAO\n@return The new aragonPM's APMRegistry app",
            "id": 5326,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "newAPM",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5011,
                  "name": "_tld",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2168:12:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5010,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2168:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5013,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2182:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5012,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2182:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5015,
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2198:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2167:45:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 5019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5018,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2229:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_APMRegistry_$2163",
                    "typeString": "contract APMRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5017,
                    "name": "APMRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2163,
                    "src": "2229:11:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2228:13:40"
            },
            "scope": 5371,
            "src": "2152:2823:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5339,
              "nodeType": "Block",
              "src": "5048:29:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5333,
                      "name": "y",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5331,
                      "src": "5058:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5335,
                          "name": "x",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5328,
                          "src": "5068:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 5334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5062:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": "bytes"
                      },
                      "id": 5336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5062:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "5058:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 5338,
                  "nodeType": "ExpressionStatement",
                  "src": "5058:12:40"
                }
              ]
            },
            "documentation": null,
            "id": 5340,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "b",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5328,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 5340,
                  "src": "4992:15:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5327,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4992:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4991:17:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 5332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5331,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 5340,
                  "src": "5032:14:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5330,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5032:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5031:16:40"
            },
            "scope": 5371,
            "src": "4981:96:40",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5369,
              "nodeType": "Block",
              "src": "5225:148:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5352,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5346,
                        "src": "5256:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5353,
                        "name": "_apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5344,
                        "src": "5263:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5354,
                            "name": "_apm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5344,
                            "src": "5269:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          "id": 5355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_REPO_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1885,
                          "src": "5269:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5269:23:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5349,
                        "name": "_acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5342,
                        "src": "5235:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 241,
                      "src": "5235:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5235:58:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5358,
                  "nodeType": "ExpressionStatement",
                  "src": "5235:58:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5362,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5346,
                        "src": "5329:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5363,
                        "name": "_apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5344,
                        "src": "5336:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5364,
                            "name": "_apm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5344,
                            "src": "5342:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          "id": 5365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_REPO_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1885,
                          "src": "5342:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5342:23:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5359,
                        "name": "_acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5342,
                        "src": "5303:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5361,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 318,
                      "src": "5303:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5303:63:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5368,
                  "nodeType": "ExpressionStatement",
                  "src": "5303:63:40"
                }
              ]
            },
            "documentation": null,
            "id": 5370,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "configureAPMPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5342,
                  "name": "_acl",
                  "nodeType": "VariableDeclaration",
                  "scope": 5370,
                  "src": "5173:8:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ACL_$1294",
                    "typeString": "contract ACL"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5341,
                    "name": "ACL",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1294,
                    "src": "5173:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ACL_$1294",
                      "typeString": "contract ACL"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5344,
                  "name": "_apm",
                  "nodeType": "VariableDeclaration",
                  "scope": 5370,
                  "src": "5183:16:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_APMRegistry_$2163",
                    "typeString": "contract APMRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5343,
                    "name": "APMRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2163,
                    "src": "5183:11:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5346,
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 5370,
                  "src": "5201:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5201:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5172:43:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 5348,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5225:0:40"
            },
            "scope": 5371,
            "src": "5140:233:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5372,
        "src": "217:5158:40"
      }
    ],
    "src": "0:5376:40"
  },
  "legacyAST": {
    "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/APMRegistryFactory.sol",
    "exportedSymbols": {
      "APMRegistryFactory": [
        5371
      ]
    },
    "id": 5372,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4939,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:40"
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/apm/APMRegistry.sol",
        "file": "../apm/APMRegistry.sol",
        "id": 4940,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 2164,
        "src": "26:32:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/apm/Repo.sol",
        "file": "../apm/Repo.sol",
        "id": 4941,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 2557,
        "src": "59:25:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/ens/ENSSubdomainRegistrar.sol",
        "file": "../ens/ENSSubdomainRegistrar.sol",
        "id": 4942,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 4234,
        "src": "85:42:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/DAOFactory.sol",
        "file": "./DAOFactory.sol",
        "id": 4943,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 5685,
        "src": "129:26:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/ENSFactory.sol",
        "file": "./ENSFactory.sol",
        "id": 4944,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 5768,
        "src": "156:26:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/facu/Documents/work/aragon/dev/aragonOS/contracts/factory/AppProxyFactory.sol",
        "file": "./AppProxyFactory.sol",
        "id": 4945,
        "nodeType": "ImportDirective",
        "scope": 5372,
        "sourceUnit": 5485,
        "src": "183:31:40",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4946,
              "name": "APMInternalAppNames",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1876,
              "src": "248:19:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_APMInternalAppNames_$1876",
                "typeString": "contract APMInternalAppNames"
              }
            },
            "id": 4947,
            "nodeType": "InheritanceSpecifier",
            "src": "248:19:40"
          }
        ],
        "contractDependencies": [
          1876
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5371,
        "linearizedBaseContracts": [
          5371,
          1876
        ],
        "name": "APMRegistryFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4949,
            "name": "daoFactory",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "274:28:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DAOFactory_$5684",
              "typeString": "contract DAOFactory"
            },
            "typeName": {
              "contractScope": null,
              "id": 4948,
              "name": "DAOFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5684,
              "src": "274:10:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DAOFactory_$5684",
                "typeString": "contract DAOFactory"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4951,
            "name": "registryBase",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "308:31:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_APMRegistry_$2163",
              "typeString": "contract APMRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 4950,
              "name": "APMRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2163,
              "src": "308:11:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_APMRegistry_$2163",
                "typeString": "contract APMRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4953,
            "name": "repoBase",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "345:20:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Repo_$2556",
              "typeString": "contract Repo"
            },
            "typeName": {
              "contractScope": null,
              "id": 4952,
              "name": "Repo",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2556,
              "src": "345:4:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Repo_$2556",
                "typeString": "contract Repo"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4955,
            "name": "ensSubdomainRegistrarBase",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "371:54:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
              "typeString": "contract ENSSubdomainRegistrar"
            },
            "typeName": {
              "contractScope": null,
              "id": 4954,
              "name": "ENSSubdomainRegistrar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4233,
              "src": "371:21:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                "typeString": "contract ENSSubdomainRegistrar"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4957,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 5371,
            "src": "431:14:40",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$6785",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 4956,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6785,
              "src": "431:3:40",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$6785",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 4963,
            "name": "DeployAPM",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4959,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 4963,
                  "src": "468:20:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4958,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "468:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4961,
                  "indexed": false,
                  "name": "apm",
                  "nodeType": "VariableDeclaration",
                  "scope": 4963,
                  "src": "490:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4960,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "490:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "467:35:40"
            },
            "src": "452:51:40"
          },
          {
            "body": {
              "id": 5008,
              "nodeType": "Block",
              "src": "1343:443:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4980,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4978,
                      "name": "daoFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4949,
                      "src": "1353:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOFactory_$5684",
                        "typeString": "contract DAOFactory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4979,
                      "name": "_daoFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4965,
                      "src": "1366:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DAOFactory_$5684",
                        "typeString": "contract DAOFactory"
                      }
                    },
                    "src": "1353:24:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$5684",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  "id": 4981,
                  "nodeType": "ExpressionStatement",
                  "src": "1353:24:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4982,
                      "name": "registryBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4951,
                      "src": "1387:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_APMRegistry_$2163",
                        "typeString": "contract APMRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4983,
                      "name": "_registryBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4967,
                      "src": "1402:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_APMRegistry_$2163",
                        "typeString": "contract APMRegistry"
                      }
                    },
                    "src": "1387:28:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "id": 4985,
                  "nodeType": "ExpressionStatement",
                  "src": "1387:28:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4988,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4986,
                      "name": "repoBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4953,
                      "src": "1425:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Repo_$2556",
                        "typeString": "contract Repo"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4987,
                      "name": "_repoBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4969,
                      "src": "1436:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Repo_$2556",
                        "typeString": "contract Repo"
                      }
                    },
                    "src": "1425:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 4989,
                  "nodeType": "ExpressionStatement",
                  "src": "1425:20:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4990,
                      "name": "ensSubdomainRegistrarBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4955,
                      "src": "1455:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                        "typeString": "contract ENSSubdomainRegistrar"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4991,
                      "name": "_ensSubBase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4971,
                      "src": "1483:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                        "typeString": "contract ENSSubdomainRegistrar"
                      }
                    },
                    "src": "1455:39:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                      "typeString": "contract ENSSubdomainRegistrar"
                    }
                  },
                  "id": 4993,
                  "nodeType": "ExpressionStatement",
                  "src": "1455:39:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4994,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4957,
                      "src": "1721:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$6785",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4995,
                          "name": "_ens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4973,
                          "src": "1727:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ENS_$6785",
                            "typeString": "contract ENS"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4997,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1743:1:40",
                              "subdenomination": null,
                              "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": 4996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1735:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 4998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1735:10:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1727:18:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5003,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16564,
                            "src": "1774:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                              "typeString": "contract APMRegistryFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                              "typeString": "contract APMRegistryFactory"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5001,
                            "name": "_ensFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4975,
                            "src": "1755:11:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSFactory_$5767",
                              "typeString": "contract ENSFactory"
                            }
                          },
                          "id": 5002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newENS",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5766,
                          "src": "1755:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_contract$_ENS_$6785_$",
                            "typeString": "function (address) external returns (contract ENS)"
                          }
                        },
                        "id": 5004,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1755:24:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 5005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "1727:52:40",
                      "trueExpression": {
                        "argumentTypes": null,
                        "id": 5000,
                        "name": "_ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "1748:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$6785",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "1721:58:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$6785",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 5007,
                  "nodeType": "ExpressionStatement",
                  "src": "1721:58:40"
                }
              ]
            },
            "documentation": "@notice Create a new factory for deploying Aragon Package Managers (aragonPM)\n@dev Requires either a given ENS registrar or ENSFactory (used for generating a new ENS in test environments).\n@param _daoFactory Base factory for deploying DAOs\n@param _registryBase APMRegistry base contract location\n@param _repoBase Repo base contract location\n@param _ensSubBase ENSSubdomainRegistrar base contract location\n@param _ens ENS instance\n@param _ensFactory ENSFactory (used to generated a new ENS if no ENS is given)",
            "id": 5009,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4965,
                  "name": "_daoFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1102:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DAOFactory_$5684",
                    "typeString": "contract DAOFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4964,
                    "name": "DAOFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5684,
                    "src": "1102:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DAOFactory_$5684",
                      "typeString": "contract DAOFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4967,
                  "name": "_registryBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1134:25:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_APMRegistry_$2163",
                    "typeString": "contract APMRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4966,
                    "name": "APMRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2163,
                    "src": "1134:11:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4969,
                  "name": "_repoBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1169:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Repo_$2556",
                    "typeString": "contract Repo"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4968,
                    "name": "Repo",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2556,
                    "src": "1169:4:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4971,
                  "name": "_ensSubBase",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1193:33:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                    "typeString": "contract ENSSubdomainRegistrar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4970,
                    "name": "ENSSubdomainRegistrar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4233,
                    "src": "1193:21:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                      "typeString": "contract ENSSubdomainRegistrar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4973,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1236:8:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$6785",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4972,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6785,
                    "src": "1236:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$6785",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4975,
                  "name": "_ensFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 5009,
                  "src": "1254:22:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENSFactory_$5767",
                    "typeString": "contract ENSFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4974,
                    "name": "ENSFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 5767,
                    "src": "1254:10:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSFactory_$5767",
                      "typeString": "contract ENSFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1092:190:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 4977,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1343:0:40"
            },
            "scope": 5371,
            "src": "1081:705:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5325,
              "nodeType": "Block",
              "src": "2242:2733:40",
              "statements": [
                {
                  "assignments": [
                    5021
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5021,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2252:12:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5020,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2252:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5029,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5025,
                            "name": "_tld",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5011,
                            "src": "2294:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5026,
                            "name": "_label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5013,
                            "src": "2300:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5023,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16420,
                            "src": "2277:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2277:16:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5027,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2277:30:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5022,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16427,
                      "src": "2267:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 5028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2267:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2252:56:40"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5032,
                          "name": "node",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5021,
                          "src": "2370:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5030,
                          "name": "ens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4957,
                          "src": "2360:3:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ENS_$6785",
                            "typeString": "contract ENS"
                          }
                        },
                        "id": 5031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6657,
                        "src": "2360:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes32) view external returns (address)"
                        }
                      },
                      "id": 5033,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2360:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5035,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16564,
                          "src": "2387:4:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                            "typeString": "contract APMRegistryFactory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                            "typeString": "contract APMRegistryFactory"
                          }
                        ],
                        "id": 5034,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2379:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 5036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2379:13:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2360:32:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5058,
                  "nodeType": "IfStatement",
                  "src": "2356:244:40",
                  "trueBody": {
                    "id": 5057,
                    "nodeType": "Block",
                    "src": "2394:206:40",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5046,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5041,
                                    "name": "_tld",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5011,
                                    "src": "2513:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5039,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4957,
                                    "src": "2503:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$6785",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 5040,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "owner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6657,
                                  "src": "2503:9:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                    "typeString": "function (bytes32) view external returns (address)"
                                  }
                                },
                                "id": 5042,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2503:15:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5044,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16564,
                                    "src": "2530:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                      "typeString": "contract APMRegistryFactory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                      "typeString": "contract APMRegistryFactory"
                                    }
                                  ],
                                  "id": 5043,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2522:7:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 5045,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2522:13:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "2503:32:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5038,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              16436,
                              16437
                            ],
                            "referencedDeclaration": 16436,
                            "src": "2495:7:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5047,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2495:41:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5048,
                        "nodeType": "ExpressionStatement",
                        "src": "2495:41:40"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5052,
                              "name": "_tld",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5011,
                              "src": "2570:4:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5053,
                              "name": "_label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5013,
                              "src": "2576:6:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5054,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16564,
                              "src": "2584:4:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                "typeString": "contract APMRegistryFactory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                                "typeString": "contract APMRegistryFactory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5049,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4957,
                              "src": "2550:3:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$6785",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 5051,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6738,
                            "src": "2550:19:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 5055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2550:39:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5056,
                        "nodeType": "ExpressionStatement",
                        "src": "2550:39:40"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5060
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5060,
                      "name": "dao",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2610:10:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Kernel_$6420",
                        "typeString": "contract Kernel"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5059,
                        "name": "Kernel",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 6420,
                        "src": "2610:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5065,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5063,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "2641:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5061,
                        "name": "daoFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4949,
                        "src": "2623:10:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_DAOFactory_$5684",
                          "typeString": "contract DAOFactory"
                        }
                      },
                      "id": 5062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newDAO",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5683,
                      "src": "2623:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_contract$_Kernel_$6420_$",
                        "typeString": "function (address) external returns (contract Kernel)"
                      }
                    },
                    "id": 5064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2623:23:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Kernel_$6420",
                      "typeString": "contract Kernel"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2610:36:40"
                },
                {
                  "assignments": [
                    5067
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5067,
                      "name": "acl",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2656:7:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ACL_$1294",
                        "typeString": "contract ACL"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5066,
                        "name": "ACL",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1294,
                        "src": "2656:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5073,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5069,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "2670:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "acl",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6290,
                          "src": "2670:7:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IACL_$1815_$",
                            "typeString": "function () view external returns (contract IACL)"
                          }
                        },
                        "id": 5071,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2670:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IACL_$1815",
                          "typeString": "contract IACL"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IACL_$1815",
                          "typeString": "contract IACL"
                        }
                      ],
                      "id": 5068,
                      "name": "ACL",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1294,
                      "src": "2666:3:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ACL_$1294_$",
                        "typeString": "type(contract ACL)"
                      }
                    },
                    "id": 5072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2666:14:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ACL_$1294",
                      "typeString": "contract ACL"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2656:24:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5077,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "2712:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5078,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5060,
                        "src": "2718:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5079,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "2723:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5962,
                          "src": "2723:20:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2723:22:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5082,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "2747:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5074,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "2691:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5076,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "2691:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2691:61:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5084,
                  "nodeType": "ExpressionStatement",
                  "src": "2691:61:40"
                },
                {
                  "assignments": [
                    5086
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5086,
                      "name": "noInit",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2793:19:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5085,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2793:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5091,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2825:1:40",
                        "subdenomination": null,
                        "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": 5088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2815:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 5087,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2819:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 5090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2815:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2793:34:40"
                },
                {
                  "assignments": [
                    5093
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5093,
                      "name": "ensSub",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "2837:28:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                        "typeString": "contract ENSSubdomainRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5092,
                        "name": "ENSSubdomainRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4233,
                        "src": "2837:21:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5114,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5100,
                                    "name": "node",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5021,
                                    "src": "2966:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5104,
                                            "name": "ENS_SUB_APP_NAME",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1875,
                                            "src": "2999:16:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 5102,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16420,
                                            "src": "2982:3:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 5103,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "2982:16:40",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 5105,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2982:34:40",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 5101,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 16427,
                                      "src": "2972:9:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                        "typeString": "function () pure returns (bytes32)"
                                      }
                                    },
                                    "id": 5106,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2972:45:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5098,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16420,
                                    "src": "2949:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5099,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "2949:16:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2949:69:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5097,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16427,
                              "src": "2939:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 5108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2939:80:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5109,
                            "name": "ensSubdomainRegistrarBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4955,
                            "src": "3037:25:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5110,
                            "name": "noInit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5086,
                            "src": "3080:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 5111,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3104:5:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5095,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "2903:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6098,
                          "src": "2903:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_contract$_ERCProxy_$7766_$",
                            "typeString": "function (bytes32,address,bytes memory,bool) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 5112,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2903:220:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 5094,
                      "name": "ENSSubdomainRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4233,
                      "src": "2868:21:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ENSSubdomainRegistrar_$4233_$",
                        "typeString": "type(contract ENSSubdomainRegistrar)"
                      }
                    },
                    "id": 5113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2868:265:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                      "typeString": "contract ENSSubdomainRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2837:296:40"
                },
                {
                  "assignments": [
                    5116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5116,
                      "name": "apm",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "3143:15:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_APMRegistry_$2163",
                        "typeString": "contract APMRegistry"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5115,
                        "name": "APMRegistry",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2163,
                        "src": "3143:11:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5137,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5123,
                                    "name": "node",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5021,
                                    "src": "3249:4:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5127,
                                            "name": "APM_APP_NAME",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1869,
                                            "src": "3282:12:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_string_memory",
                                              "typeString": "string memory"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 5125,
                                            "name": "abi",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 16420,
                                            "src": "3265:3:40",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_magic_abi",
                                              "typeString": "abi"
                                            }
                                          },
                                          "id": 5126,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "memberName": "encodePacked",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": null,
                                          "src": "3265:16:40",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                            "typeString": "function () pure returns (bytes memory)"
                                          }
                                        },
                                        "id": 5128,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3265:30:40",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "id": 5124,
                                      "name": "keccak256",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 16427,
                                      "src": "3255:9:40",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                        "typeString": "function () pure returns (bytes32)"
                                      }
                                    },
                                    "id": 5129,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3255:41:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5121,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16420,
                                    "src": "3232:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5122,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3232:16:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5130,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3232:65:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5120,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16427,
                              "src": "3222:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 5131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3222:76:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5132,
                            "name": "registryBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4951,
                            "src": "3316:12:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5133,
                            "name": "noInit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5086,
                            "src": "3346:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 5134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3370:5:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5118,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "3186:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "newAppInstance",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6098,
                          "src": "3186:18:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_contract$_ERCProxy_$7766_$",
                            "typeString": "function (bytes32,address,bytes memory,bool) external returns (contract ERCProxy)"
                          }
                        },
                        "id": 5135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3186:203:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERCProxy_$7766",
                          "typeString": "contract ERCProxy"
                        }
                      ],
                      "id": 5117,
                      "name": "APMRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2163,
                      "src": "3161:11:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_APMRegistry_$2163_$",
                        "typeString": "type(contract APMRegistry)"
                      }
                    },
                    "id": 5136,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3161:238:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3143:256:40"
                },
                {
                  "assignments": [
                    5139
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5139,
                      "name": "repoAppId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "3448:17:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5138,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3448:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5152,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5143,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5021,
                            "src": "3495:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5147,
                                    "name": "REPO_APP_NAME",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1872,
                                    "src": "3528:13:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5145,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 16420,
                                    "src": "3511:3:40",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5146,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3511:16:40",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5148,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3511:31:40",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5144,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 16427,
                              "src": "3501:9:40",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 5149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3501:42:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5141,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16420,
                            "src": "3478:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3478:16:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5150,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3478:66:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5140,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16427,
                      "src": "3468:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                        "typeString": "function () pure returns (bytes32)"
                      }
                    },
                    "id": 5151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3468:77:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3448:97:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5156,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "3566:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_BASES_NAMESPACE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6225,
                          "src": "3566:23:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure external returns (bytes32)"
                          }
                        },
                        "id": 5158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3566:25:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5159,
                        "name": "repoAppId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5139,
                        "src": "3593:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5160,
                        "name": "repoBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4953,
                        "src": "3604:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5153,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5060,
                        "src": "3555:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      "id": 5155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setApp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6192,
                      "src": "3555:10:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address) external"
                      }
                    },
                    "id": 5161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3555:58:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5162,
                  "nodeType": "ExpressionStatement",
                  "src": "3555:58:40"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5164,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5021,
                        "src": "3639:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5165,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "3645:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      ],
                      "id": 5163,
                      "name": "DeployAPM",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "3629:9:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 5166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3629:20:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5167,
                  "nodeType": "EmitStatement",
                  "src": "3624:25:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5171,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "3750:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5172,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "3755:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5173,
                            "name": "ensSub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5093,
                            "src": "3763:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            }
                          },
                          "id": 5174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_NAME_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3932,
                          "src": "3763:23:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3763:25:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5176,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "3790:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5168,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "3729:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "3729:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3729:67:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5178,
                  "nodeType": "ExpressionStatement",
                  "src": "3729:67:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5182,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "3827:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5183,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "3832:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5184,
                            "name": "ensSub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5093,
                            "src": "3840:6:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                              "typeString": "contract ENSSubdomainRegistrar"
                            }
                          },
                          "id": 5185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "POINT_ROOTNODE_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3938,
                          "src": "3840:26:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5186,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3840:28:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5187,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "3870:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5179,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "3806:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5181,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "3806:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5188,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3806:70:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5189,
                  "nodeType": "ExpressionStatement",
                  "src": "3806:70:40"
                },
                {
                  "assignments": [
                    5191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5191,
                      "name": "permRole",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "3950:16:40",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5190,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "3950:7:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5195,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5192,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "3969:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5193,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "CREATE_PERMISSIONS_ROLE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18,
                      "src": "3969:27:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view external returns (bytes32)"
                      }
                    },
                    "id": 5194,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3969:29:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3950:48:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5199,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4029:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5200,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4034:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5201,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4039:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5196,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4009:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 241,
                      "src": "4009:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4009:39:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5203,
                  "nodeType": "ExpressionStatement",
                  "src": "4009:39:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5207,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5021,
                        "src": "4094:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5208,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "4100:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5204,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4957,
                        "src": "4081:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 5206,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6706,
                      "src": "4081:12:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address) external"
                      }
                    },
                    "id": 5209,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4081:26:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5210,
                  "nodeType": "ExpressionStatement",
                  "src": "4081:26:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5214,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4957,
                        "src": "4135:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5215,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5021,
                        "src": "4140:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ENS_$6785",
                          "typeString": "contract ENS"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5211,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "4117:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      "id": 5213,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3996,
                      "src": "4117:17:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_AbstractENS_$6601_$_t_bytes32_$returns$__$",
                        "typeString": "function (contract AbstractENS,bytes32) external"
                      }
                    },
                    "id": 5216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4117:28:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5217,
                  "nodeType": "ExpressionStatement",
                  "src": "4117:28:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5221,
                        "name": "ensSub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "4170:6:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5218,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4155:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1963,
                      "src": "4155:14:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ENSSubdomainRegistrar_$4233_$returns$__$",
                        "typeString": "function (contract ENSSubdomainRegistrar) external"
                      }
                    },
                    "id": 5222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4155:22:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5223,
                  "nodeType": "ExpressionStatement",
                  "src": "4155:22:40"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5228,
                      "name": "firstVersion",
                      "nodeType": "VariableDeclaration",
                      "scope": 5326,
                      "src": "4188:29:40",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                        "typeString": "uint16[3]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 5226,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "4188:6:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 5227,
                        "length": {
                          "argumentTypes": null,
                          "hexValue": "33",
                          "id": 5225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4195:1:40",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          },
                          "value": "3"
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "4188:9:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_storage_ptr",
                          "typeString": "uint16[3]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5229,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4188:29:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 5230,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4227:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      "id": 5232,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 5231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4240:1:40",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4227:15:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 5233,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4245:1:40",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "4227:19:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 5235,
                  "nodeType": "ExpressionStatement",
                  "src": "4227:19:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5239,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "4278:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5240,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4284:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5241,
                            "name": "apm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5116,
                            "src": "4289:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          "id": 5242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_REPO_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1885,
                          "src": "4289:20:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5243,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4289:22:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5244,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "4313:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5236,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4257:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 220,
                      "src": "4257:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,address,bytes32,address) external"
                      }
                    },
                    "id": 5245,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4257:61:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5246,
                  "nodeType": "ExpressionStatement",
                  "src": "4257:61:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5250,
                        "name": "APM_APP_NAME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1869,
                        "src": "4352:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5251,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4366:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5252,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4373:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5253,
                        "name": "registryBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4951,
                        "src": "4387:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "697066733a61706d",
                            "id": 5255,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4403:10:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_bd519e9468823d7fd2951ca90a412c420218a9c6cae3c0013f571decac044ab0",
                              "typeString": "literal_string \"ipfs:apm\""
                            },
                            "value": "ipfs:apm"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_bd519e9468823d7fd2951ca90a412c420218a9c6cae3c0013f571decac044ab0",
                              "typeString": "literal_string \"ipfs:apm\""
                            }
                          ],
                          "id": 5254,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5340,
                          "src": "4401:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 5256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4401:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5247,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4329:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5249,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newRepoWithVersion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "4329:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Repo_$2556_$",
                        "typeString": "function (string memory,address,uint16[3] memory,address,bytes memory) external returns (contract Repo)"
                      }
                    },
                    "id": 5257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4329:86:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 5258,
                  "nodeType": "ExpressionStatement",
                  "src": "4329:86:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5262,
                        "name": "ENS_SUB_APP_NAME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1875,
                        "src": "4448:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5263,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4466:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5264,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4473:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5265,
                        "name": "ensSubdomainRegistrarBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4955,
                        "src": "4487:25:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "697066733a656e73737562",
                            "id": 5267,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4516:13:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_40e9f415690a155a4d25684a7502b118cee0b74bb8c46f947331f8e0ab927857",
                              "typeString": "literal_string \"ipfs:enssub\""
                            },
                            "value": "ipfs:enssub"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_40e9f415690a155a4d25684a7502b118cee0b74bb8c46f947331f8e0ab927857",
                              "typeString": "literal_string \"ipfs:enssub\""
                            }
                          ],
                          "id": 5266,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5340,
                          "src": "4514:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 5268,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4514:16:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ENSSubdomainRegistrar_$4233",
                          "typeString": "contract ENSSubdomainRegistrar"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5259,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4425:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newRepoWithVersion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "4425:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Repo_$2556_$",
                        "typeString": "function (string memory,address,uint16[3] memory,address,bytes memory) external returns (contract Repo)"
                      }
                    },
                    "id": 5269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4425:106:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 5270,
                  "nodeType": "ExpressionStatement",
                  "src": "4425:106:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5274,
                        "name": "REPO_APP_NAME",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1872,
                        "src": "4564:13:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5275,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4579:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5276,
                        "name": "firstVersion",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5228,
                        "src": "4586:12:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5277,
                        "name": "repoBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4953,
                        "src": "4600:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "697066733a7265706f",
                            "id": 5279,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4612:11:40",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_48cc521ec21e9d8c7d46de750cc52d64e5a87b969982c6994e87bd988c7ea604",
                              "typeString": "literal_string \"ipfs:repo\""
                            },
                            "value": "ipfs:repo"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_48cc521ec21e9d8c7d46de750cc52d64e5a87b969982c6994e87bd988c7ea604",
                              "typeString": "literal_string \"ipfs:repo\""
                            }
                          ],
                          "id": 5278,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5340,
                          "src": "4610:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 5280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4610:14:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint16_$3_memory_ptr",
                          "typeString": "uint16[3] memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Repo_$2556",
                          "typeString": "contract Repo"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5271,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4541:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      "id": 5273,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newRepoWithVersion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2058,
                      "src": "4541:22:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$_t_array$_t_uint16_$3_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_Repo_$2556_$",
                        "typeString": "function (string memory,address,uint16[3] memory,address,bytes memory) external returns (contract Repo)"
                      }
                    },
                    "id": 5281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4541:84:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Repo_$2556",
                      "typeString": "contract Repo"
                    }
                  },
                  "id": 5282,
                  "nodeType": "ExpressionStatement",
                  "src": "4541:84:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5284,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4660:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5285,
                        "name": "apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "4665:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5286,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4670:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5283,
                      "name": "configureAPMPermissions",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5370,
                      "src": "4636:23:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ACL_$1294_$_t_contract$_APMRegistry_$2163_$_t_address_$returns$__$",
                        "typeString": "function (contract ACL,contract APMRegistry,address)"
                      }
                    },
                    "id": 5287,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4636:40:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5288,
                  "nodeType": "ExpressionStatement",
                  "src": "4636:40:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5292,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4754:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5293,
                        "name": "dao",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5060,
                        "src": "4761:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5294,
                            "name": "dao",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5060,
                            "src": "4766:3:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Kernel_$6420",
                              "typeString": "contract Kernel"
                            }
                          },
                          "id": 5295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "APP_MANAGER_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5962,
                          "src": "4766:20:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5296,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4766:22:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_Kernel_$6420",
                          "typeString": "contract Kernel"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5289,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4729:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 318,
                      "src": "4729:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4729:60:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5298,
                  "nodeType": "ExpressionStatement",
                  "src": "4729:60:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5302,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16564,
                        "src": "4820:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5303,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4826:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5304,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4831:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_APMRegistryFactory_$5371",
                          "typeString": "contract APMRegistryFactory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5299,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4799:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "revokePermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 298,
                      "src": "4799:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4799:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5306,
                  "nodeType": "ExpressionStatement",
                  "src": "4799:41:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5310,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4870:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5311,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4877:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5312,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4882:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5307,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4850:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5309,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 241,
                      "src": "4850:19:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4850:41:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5314,
                  "nodeType": "ExpressionStatement",
                  "src": "4850:41:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5318,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5015,
                        "src": "4926:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5319,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4933:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5320,
                        "name": "permRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5191,
                        "src": "4938:8:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5315,
                        "name": "acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5067,
                        "src": "4901:3:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 318,
                      "src": "4901:24:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4901:46:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5322,
                  "nodeType": "ExpressionStatement",
                  "src": "4901:46:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5323,
                    "name": "apm",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5116,
                    "src": "4965:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "functionReturnParameters": 5019,
                  "id": 5324,
                  "nodeType": "Return",
                  "src": "4958:10:40"
                }
              ]
            },
            "documentation": "@notice Create a new Aragon Package Manager (aragonPM) DAO, holding the `_label` subdomain from parent `_tld` and controlled by `_root`\n@param _tld The parent node of the controlled subdomain\n@param _label The subdomain label\n@param _root Manager for the new aragonPM DAO\n@return The new aragonPM's APMRegistry app",
            "id": 5326,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "newAPM",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5011,
                  "name": "_tld",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2168:12:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5010,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2168:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5013,
                  "name": "_label",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2182:14:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 5012,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2182:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5015,
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2198:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2198:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2167:45:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 5019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5018,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5326,
                  "src": "2229:11:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_APMRegistry_$2163",
                    "typeString": "contract APMRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5017,
                    "name": "APMRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2163,
                    "src": "2229:11:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2228:13:40"
            },
            "scope": 5371,
            "src": "2152:2823:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5339,
              "nodeType": "Block",
              "src": "5048:29:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5333,
                      "name": "y",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5331,
                      "src": "5058:1:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5335,
                          "name": "x",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5328,
                          "src": "5068:1:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        ],
                        "id": 5334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5062:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": "bytes"
                      },
                      "id": 5336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5062:8:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "5058:12:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 5338,
                  "nodeType": "ExpressionStatement",
                  "src": "5058:12:40"
                }
              ]
            },
            "documentation": null,
            "id": 5340,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "b",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5328,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 5340,
                  "src": "4992:15:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5327,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4992:6:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4991:17:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 5332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5331,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 5340,
                  "src": "5032:14:40",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5330,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5032:5:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5031:16:40"
            },
            "scope": 5371,
            "src": "4981:96:40",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5369,
              "nodeType": "Block",
              "src": "5225:148:40",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5352,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5346,
                        "src": "5256:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5353,
                        "name": "_apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5344,
                        "src": "5263:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5354,
                            "name": "_apm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5344,
                            "src": "5269:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          "id": 5355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_REPO_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1885,
                          "src": "5269:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5269:23:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5349,
                        "name": "_acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5342,
                        "src": "5235:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5351,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "grantPermission",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 241,
                      "src": "5235:20:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5235:58:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5358,
                  "nodeType": "ExpressionStatement",
                  "src": "5235:58:40"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5362,
                        "name": "_root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5346,
                        "src": "5329:5:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5363,
                        "name": "_apm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5344,
                        "src": "5336:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5364,
                            "name": "_apm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5344,
                            "src": "5342:4:40",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_APMRegistry_$2163",
                              "typeString": "contract APMRegistry"
                            }
                          },
                          "id": 5365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "CREATE_REPO_ROLE",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1885,
                          "src": "5342:21:40",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 5366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5342:23:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_APMRegistry_$2163",
                          "typeString": "contract APMRegistry"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5359,
                        "name": "_acl",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5342,
                        "src": "5303:4:40",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ACL_$1294",
                          "typeString": "contract ACL"
                        }
                      },
                      "id": 5361,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setPermissionManager",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 318,
                      "src": "5303:25:40",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_bytes32_$returns$__$",
                        "typeString": "function (address,address,bytes32) external"
                      }
                    },
                    "id": 5367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5303:63:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5368,
                  "nodeType": "ExpressionStatement",
                  "src": "5303:63:40"
                }
              ]
            },
            "documentation": null,
            "id": 5370,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "configureAPMPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5342,
                  "name": "_acl",
                  "nodeType": "VariableDeclaration",
                  "scope": 5370,
                  "src": "5173:8:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ACL_$1294",
                    "typeString": "contract ACL"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5341,
                    "name": "ACL",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1294,
                    "src": "5173:3:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ACL_$1294",
                      "typeString": "contract ACL"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5344,
                  "name": "_apm",
                  "nodeType": "VariableDeclaration",
                  "scope": 5370,
                  "src": "5183:16:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_APMRegistry_$2163",
                    "typeString": "contract APMRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5343,
                    "name": "APMRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2163,
                    "src": "5183:11:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_APMRegistry_$2163",
                      "typeString": "contract APMRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5346,
                  "name": "_root",
                  "nodeType": "VariableDeclaration",
                  "scope": 5370,
                  "src": "5201:13:40",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5345,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5201:7:40",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5172:43:40"
            },
            "payable": false,
            "returnParameters": {
              "id": 5348,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5225:0:40"
            },
            "scope": 5371,
            "src": "5140:233:40",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 5372,
        "src": "217:5158:40"
      }
    ],
    "src": "0:5376:40"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-09-03T15:25:09.505Z"
}