{
  "contractName": "PublicResolver",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "setDNSRecords",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "key",
          "type": "string"
        },
        {
          "name": "value",
          "type": "string"
        }
      ],
      "name": "setText",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "interfaceImplementer",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "contentTypes",
          "type": "uint256"
        }
      ],
      "name": "ABI",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "x",
          "type": "bytes32"
        },
        {
          "name": "y",
          "type": "bytes32"
        }
      ],
      "name": "setPubkey",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "hash",
          "type": "bytes"
        }
      ],
      "name": "setContenthash",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "addr",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "name",
          "type": "bytes32"
        }
      ],
      "name": "hasDNSRecords",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "key",
          "type": "string"
        }
      ],
      "name": "text",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "contentType",
          "type": "uint256"
        },
        {
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "setABI",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "coinType",
          "type": "uint256"
        },
        {
          "name": "a",
          "type": "bytes"
        }
      ],
      "name": "setAddr",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "name",
          "type": "bytes32"
        },
        {
          "name": "resource",
          "type": "uint16"
        }
      ],
      "name": "dnsRecord",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "clearDNSZone",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "contenthash",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "pubkey",
      "outputs": [
        {
          "name": "x",
          "type": "bytes32"
        },
        {
          "name": "y",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "setAddr",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "interfaceID",
          "type": "bytes4"
        },
        {
          "name": "implementer",
          "type": "address"
        }
      ],
      "name": "setInterface",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "coinType",
          "type": "uint256"
        }
      ],
      "name": "addr",
      "outputs": [
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "authorisations",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_ens",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "isAuthorised",
          "type": "bool"
        }
      ],
      "name": "AuthorisationChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "indexedKey",
          "type": "string"
        },
        {
          "indexed": false,
          "name": "key",
          "type": "string"
        }
      ],
      "name": "TextChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "x",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "y",
          "type": "bytes32"
        }
      ],
      "name": "PubkeyChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "name",
          "type": "string"
        }
      ],
      "name": "NameChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "interfaceID",
          "type": "bytes4"
        },
        {
          "indexed": false,
          "name": "implementer",
          "type": "address"
        }
      ],
      "name": "InterfaceChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "name",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "resource",
          "type": "uint16"
        },
        {
          "indexed": false,
          "name": "record",
          "type": "bytes"
        }
      ],
      "name": "DNSRecordChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "name",
          "type": "bytes"
        },
        {
          "indexed": false,
          "name": "resource",
          "type": "uint16"
        }
      ],
      "name": "DNSRecordDeleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "DNSZoneCleared",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "hash",
          "type": "bytes"
        }
      ],
      "name": "ContenthashChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "a",
          "type": "address"
        }
      ],
      "name": "AddrChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "coinType",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "newAddress",
          "type": "bytes"
        }
      ],
      "name": "AddressChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "contentType",
          "type": "uint256"
        }
      ],
      "name": "ABIChanged",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "target",
          "type": "address"
        },
        {
          "name": "isAuthorised",
          "type": "bool"
        }
      ],
      "name": "setAuthorisation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setDNSRecords\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"interfaceImplementer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setContenthash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"target\",\"type\":\"address\"},{\"name\":\"isAuthorised\",\"type\":\"bool\"}],\"name\":\"setAuthorisation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"bytes32\"}],\"name\":\"hasDNSRecords\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"},{\"name\":\"a\",\"type\":\"bytes\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"bytes32\"},{\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"dnsRecord\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"name\":\"results\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"clearDNSZone\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"contenthash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"setInterface\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authorisations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_ens\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"isAuthorised\",\"type\":\"bool\"}],\"name\":\"AuthorisationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"indexed\":false,\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"InterfaceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"resource\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"record\",\"type\":\"bytes\"}],\"name\":\"DNSRecordChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"DNSRecordDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"DNSZoneCleared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"ContenthashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"coinType\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newAddress\",\"type\":\"bytes\"}],\"name\":\"AddressChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"ABI(bytes32,uint256)\":{\"params\":{\"contentTypes\":\"A bitwise OR of the ABI formats accepted by the caller.\",\"node\":\"The ENS node to query\"},\"return\":\"contentType The content type of the return valuedata The ABI data\"},\"addr(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated address.\"},\"clearDNSZone(bytes32)\":{\"params\":{\"node\":\"the namehash of the node for which to clear the zone\"}},\"contenthash(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated contenthash.\"},\"dnsRecord(bytes32,bytes32,uint16)\":{\"params\":{\"name\":\"the keccak-256 hash of the fully-qualified name for which to fetch the record\",\"node\":\"the namehash of the node for which to fetch the record\",\"resource\":\"the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\"},\"return\":\"the DNS record in wire format if present, otherwise empty\"},\"hasDNSRecords(bytes32,bytes32)\":{\"params\":{\"name\":\"the namehash of the node for which to check the records\",\"node\":\"the namehash of the node for which to check the records\"}},\"interfaceImplementer(bytes32,bytes4)\":{\"params\":{\"interfaceID\":\"The EIP 168 interface ID to check for.\",\"node\":\"The ENS node to query.\"},\"return\":\"The address that implements this interface, or 0 if the interface is unsupported.\"},\"name(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated name.\"},\"pubkey(bytes32)\":{\"params\":{\"node\":\"The ENS node to query\"},\"return\":\"x, y the X and Y coordinates of the curve point for the public key.\"},\"setABI(bytes32,uint256,bytes)\":{\"params\":{\"contentType\":\"The content type of the ABI\",\"data\":\"The ABI data.\",\"node\":\"The node to update.\"}},\"setAddr(bytes32,address)\":{\"params\":{\"a\":\"The address to set.\",\"node\":\"The node to update.\"}},\"setAuthorisation(bytes32,address,bool)\":{\"details\":\"Sets or clears an authorisation. Authorisations are specific to the caller. Any account can set an authorisation for any name, but the authorisation that is checked will be that of the current owner of a name. Thus, transferring a name effectively clears any existing authorisations, and new authorisations can be set in advance of an ownership transfer if desired.\",\"params\":{\"isAuthorised\":\"True if the address should be authorised, or false if it should be deauthorised.\",\"node\":\"The name to change the authorisation on.\",\"target\":\"The address that is to be authorised or deauthorised.\"}},\"setContenthash(bytes32,bytes)\":{\"params\":{\"hash\":\"The contenthash to set\",\"node\":\"The node to update.\"}},\"setDNSRecords(bytes32,bytes)\":{\"params\":{\"data\":\"the DNS wire format records to set\",\"node\":\"the namehash of the node for which to set the records\"}},\"setInterface(bytes32,bytes4,address)\":{\"params\":{\"implementer\":\"The address of a contract that implements this interface for this node.\",\"interfaceID\":\"The EIP 168 interface ID.\",\"node\":\"The node to update.\"}},\"setName(bytes32,string)\":{\"params\":{\"name\":\"The name to set.\",\"node\":\"The node to update.\"}},\"setPubkey(bytes32,bytes32,bytes32)\":{\"params\":{\"node\":\"The ENS node to query\",\"x\":\"the X coordinate of the curve point for the public key.\",\"y\":\"the Y coordinate of the curve point for the public key.\"}},\"setText(bytes32,string,string)\":{\"params\":{\"key\":\"The key to set.\",\"node\":\"The node to update.\",\"value\":\"The text data value to set.\"}},\"text(bytes32,string)\":{\"params\":{\"key\":\"The text data key to query.\",\"node\":\"The ENS node to query.\"},\"return\":\"The associated text data.\"}}},\"userdoc\":{\"methods\":{\"ABI(bytes32,uint256)\":{\"notice\":\"Returns the ABI associated with an ENS node. Defined in EIP205.\"},\"addr(bytes32)\":{\"notice\":\"Returns the address associated with an ENS node.\"},\"clearDNSZone(bytes32)\":{\"notice\":\"Clear all information for a DNS zone.\"},\"contenthash(bytes32)\":{\"notice\":\"Returns the contenthash associated with an ENS node.\"},\"dnsRecord(bytes32,bytes32,uint16)\":{\"notice\":\"Obtain a DNS record.\"},\"hasDNSRecords(bytes32,bytes32)\":{\"notice\":\"Check if a given node has records.\"},\"interfaceImplementer(bytes32,bytes4)\":{\"notice\":\"Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP168 and returns `true` for the specified interfaceID, its address will be returned.\"},\"name(bytes32)\":{\"notice\":\"Returns the name associated with an ENS node, for reverse records. Defined in EIP181.\"},\"pubkey(bytes32)\":{\"notice\":\"Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619.\"},\"setABI(bytes32,uint256,bytes)\":{\"notice\":\"Sets the ABI associated with an ENS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string.\"},\"setAddr(bytes32,address)\":{\"notice\":\"Sets the address associated with an ENS node. May only be called by the owner of that node in the ENS registry.\"},\"setContenthash(bytes32,bytes)\":{\"notice\":\"Sets the contenthash associated with an ENS node. May only be called by the owner of that node in the ENS registry.\"},\"setDNSRecords(bytes32,bytes)\":{\"notice\":\"Set one or more DNS records.  Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied:    a.example.com IN A 1.2.3.4    a.example.com IN A 5.6.7.8    www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied:    a.example.com IN A 1.2.3.4    www.example.com IN CNAME a.example.com.    a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\"},\"setInterface(bytes32,bytes4,address)\":{\"notice\":\"Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\"},\"setName(bytes32,string)\":{\"notice\":\"Sets the name associated with an ENS node, for reverse records. May only be called by the owner of that node in the ENS registry.\"},\"setPubkey(bytes32,bytes32,bytes32)\":{\"notice\":\"Sets the SECP256k1 public key associated with an ENS node.\"},\"setText(bytes32,string,string)\":{\"notice\":\"Sets the text data associated with an ENS node and key. May only be called by the owner of that node in the ENS registry.\"},\"text(bytes32,string)\":{\"notice\":\"Returns the text data associated with an ENS node and key.\"}},\"notice\":\"A simple resolver anyone can use; only allows the owner of a node to set its address.\"}},\"settings\":{\"compilationTarget\":{\"/home/user/Dropbox/projects/resolvers/contracts/PublicResolver.sol\":\"PublicResolver\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/user/Dropbox/projects/resolvers/contracts/PublicResolver.sol\":{\"keccak256\":\"0xefbe75eae88d73e4db56bc22f72fbf157d027caf2d20644eb99298f04b27fa5f\",\"urls\":[\"bzzr://4cb74b326c91262a10141c4c2dfe36a303793fbb300f502a0f3e2fbfbb468c58\"]},\"/home/user/Dropbox/projects/resolvers/contracts/ResolverBase.sol\":{\"keccak256\":\"0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8\",\"urls\":[\"bzzr://81e5565403a67f558d12c787f53f40ff19a5da99c648f8a4f99f2caa449ca0e6\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/ABIResolver.sol\":{\"keccak256\":\"0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f\",\"urls\":[\"bzzr://9fdf58339517baeca57889519a4bb2f30a010f2f4262771e6f5de4374fc436b1\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/AddrResolver.sol\":{\"keccak256\":\"0xbe84f840b10f6ddc3d695d5905fe4034569c646bdf56b1367c16271aa92071c6\",\"urls\":[\"bzzr://c97941ee4075d43abe371cc52f3bfa018d7dc93c7cfbb72da565ecaa72996381\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/ContentHashResolver.sol\":{\"keccak256\":\"0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc\",\"urls\":[\"bzzr://c80ec35a145dd4b853e1e04b32763843313be216462a4993d28d5b489a6912f7\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/DNSResolver.sol\":{\"keccak256\":\"0x51534f5ebdcfda403b1a935f256e7f27d16b490e5b023b6e57877973daf9a4d4\",\"urls\":[\"bzzr://a81c189814102f6debd761795650d94694225b7486d490faf7d5fb6e0704ed28\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/InterfaceResolver.sol\":{\"keccak256\":\"0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41\",\"urls\":[\"bzzr://0d539232d308722b6a434ed5e9a22b0c4cb849c641b6d0739f2f83e566cb59f1\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/NameResolver.sol\":{\"keccak256\":\"0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16\",\"urls\":[\"bzzr://a4a8988916719c4976bb0caf1cff3bdee3c94ae693b57970f6b925124cff38ee\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/PubkeyResolver.sol\":{\"keccak256\":\"0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a\",\"urls\":[\"bzzr://1caaa8668f536f654f4e6d68129ab5091e0ed5c72e0e70216b82d0bb9e7cd86f\"]},\"/home/user/Dropbox/projects/resolvers/contracts/profiles/TextResolver.sol\":{\"keccak256\":\"0x1feb20d9466c52f471c57344c1e3792e2c69b24ab9d7f7a4de6e49912abc75bb\",\"urls\":[\"bzzr://25ce3b4bf68f29d54e8916c0682b746a9e15f14bcccfc76136fc17ae2c902898\"]},\"@ensdomains/buffer/contracts/Buffer.sol\":{\"keccak256\":\"0x1264adbd06f6e05b04539bb225063a988b7fa90343d068de60cdde6cfb6fa92d\",\"urls\":[\"bzzr://8f1cb39e242b73bb7fac1f48bf0380ccccad14f06aae9cf4f87329cc78186122\"]},\"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\":{\"keccak256\":\"0x4014e689ef4a36cbf7103d88286abd2a7c560c2a7af99a561c33c61bc78be27a\",\"urls\":[\"bzzr://adf984996598f1e0d446eea1eda14ed2c49ab86a4ea1ae837cf4f9d99556b9c2\"]},\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\":{\"keccak256\":\"0x5135591043cf38413b19f93d16f189f0f8b50b01b78642fb764635d9790cc7ca\",\"urls\":[\"bzzr://7e3a0111306a7c5640e213da22bcfac1e42b813e8d4d99ef7ea33c09747049fc\"]},\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0xe688db01c0b974f8ff8565557f7fe81aa1f209c1497ec1e74536241f4cc11f08\",\"urls\":[\"bzzr://04aa083550728a1da54d9acf874f4fca77cc3afef81c57f1ec19be78af05019a\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516020806200386d833981018060405262000033919081019062000092565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000120565b6000815190506200008c8162000106565b92915050565b600060208284031215620000a557600080fd5b6000620000b5848285016200007b565b91505092915050565b6000620000cb82620000e6565b9050919050565b6000620000df82620000be565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200011181620000d2565b81146200011d57600080fd5b50565b61373d80620001306000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063691f3431116100c3578063bc1c58d11161007c578063bc1c58d11461040a578063c86902331461043a578063d5fa2b001461046b578063e59d895d14610487578063f1cb7e06146104a3578063f86bc879146104d357610158565b8063691f34311461032657806377372213146103565780638b95dd7114610372578063a8fa56821461038e578063ac9650d8146103be578063ad5780af146103ee57610158565b8063304e6ade11610115578063304e6ade146102425780633b3b57de1461025e5780633e9ce7941461028e5780634cbf6ba4146102aa57806359d1d43c146102da578063623195b01461030a57610158565b806301ffc9a71461015d5780630af179d71461018d57806310f13a8c146101a9578063124a319c146101c55780632203ab56146101f557806329cd62ea14610226575b600080fd5b61017760048036036101729190810190612ecd565b610503565b60405161018491906132ae565b60405180910390f35b6101a760048036036101a29190810190612c85565b610564565b005b6101c360048036036101be9190810190612d35565b610792565b005b6101df60048036036101da9190810190612bfa565b610840565b6040516101ec919061323b565b60405180910390f35b61020f600480360361020a9190810190612dbe565b610c2b565b60405161021d929190613429565b60405180910390f35b610240600480360361023b9190810190612b5c565b610d7a565b005b61025c60048036036102579190810190612c85565b610e0c565b005b61027860048036036102739190810190612a1d565b610e82565b6040516102859190613271565b60405180910390f35b6102a860048036036102a39190810190612ad1565b610eb9565b005b6102c460048036036102bf9190810190612b20565b610fc9565b6040516102d191906132ae565b60405180910390f35b6102f460048036036102ef9190810190612cdd565b611031565b6040516103019190613407565b60405180910390f35b610324600480360361031f9190810190612dfa565b611106565b005b610340600480360361033b9190810190612a1d565b611193565b60405161034d9190613407565b60405180910390f35b610370600480360361036b9190810190612cdd565b611248565b005b61038c60048036036103879190810190612e66565b6112be565b005b6103a860048036036103a39190810190612bab565b611394565b6040516103b5919061334c565b60405180910390f35b6103d860048036036103d391908101906129d8565b611499565b6040516103e5919061328c565b60405180910390f35b61040860048036036104039190810190612a1d565b6115ef565b005b610424600480360361041f9190810190612a1d565b611656565b604051610431919061334c565b60405180910390f35b610454600480360361044f9190810190612a1d565b61170b565b6040516104629291906132e4565b60405180910390f35b61048560048036036104809190810190612a46565b611745565b005b6104a1600480360361049c9190810190612c36565b611771565b005b6104bd60048036036104b89190810190612dbe565b611883565b6040516104ca919061334c565b60405180910390f35b6104ed60048036036104e89190810190612a82565b61194a565b6040516104fa91906132ae565b60405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055d575061055c82611986565b5b9050919050565b8261056e816119e7565b61057757600080fd5b60008090506000809050606080600061058e6125b2565b6105e660008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b7090919063ffffffff16565b90505b6105f281611b9a565b61071f5760008661ffff16141561064e578060400151955061061381611bb0565b93508360405160200161062691906131f6565b60405160208183030381529060405280519060200120915061064781611be7565b9250610711565b606061065982611bb0565b9050816040015161ffff168761ffff1614158061068657506106848186611c1790919063ffffffff16565b155b1561070f576106e88b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611c3e565b81604001519650816020015195508094508480519060200120925061070c82611be7565b93505b505b61071a81611f6e565b6105e9565b50600083511115610787576107868984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611c3e565b5b505050505050505050565b8461079c816119e7565b6107a557600080fd5b82826009600089815260200190815260200160002087876040516107ca92919061320d565b908152602001604051809103902091906107e59291906125fd565b5084846040516107f692919061320d565b6040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a755087876040516108309291906133e3565b60405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109055780915050610c25565b600061091085610e82565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095257600092505050610c25565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b604051602401610985919061330d565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a0f91906131f6565b600060405180830381855afa9150503d8060008114610a4a576040519150601f19603f3d011682016040523d82523d6000602084013e610a4f565b606091505b5091509150811580610a62575060208151105b80610aa95750600060f81b81601f81518110610a7a57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610abb576000945050505050610c25565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ae3919061330d565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610b6d91906131f6565b600060405180830381855afa9150503d8060008114610ba8576040519150601f19603f3d011682016040523d82523d6000602084013e610bad565b606091505b508092508193505050811580610bc4575060208151105b80610c0b5750600060f81b81601f81518110610bdc57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610c1d576000945050505050610c25565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111610d5757600085821614158015610c8c57506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b15610d4b5780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b50505050509050935093505050610d73565b600181901b9050610c4c565b5060006040518060200160405280600081525081915092509250505b9250929050565b82610d84816119e7565b610d8d57600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051610dfe9291906132e4565b60405180910390a250505050565b82610e16816119e7565b610e1f57600080fd5b8282600260008781526020019081526020016000209190610e4192919061267d565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610e74929190613328565b60405180910390a250505050565b60006060610e9183603c611883565b9050600081511415610ea7576000915050610eb4565b610eb081612082565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051610fbc91906132ae565b60405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405161105692919061320d565b90815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110f85780601f106110cd576101008083540402835291602001916110f8565b820191906000526020600020905b8154815290600101906020018083116110db57829003601f168201915b505050505090509392505050565b83611110816119e7565b61111957600080fd5b60008460018603161461112b57600080fd5b82826000808881526020019081526020016000206000878152602001908152602001600020919061115d92919061267d565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561123c5780601f106112115761010080835404028352916020019161123c565b820191906000526020600020905b81548152906001019060200180831161121f57829003601f168201915b50505050509050919050565b82611252816119e7565b61125b57600080fd5b828260076000878152602001908152602001600020919061127d9291906125fd565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784846040516112b09291906133e3565b60405180910390a250505050565b826112c8816119e7565b6112d157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484604051611303929190613429565b60405180910390a2603c83141561135557837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261133f84612082565b60405161134c9190613256565b60405180910390a25b81600160008681526020019081526020016000206000858152602001908152602001600020908051906020019061138d9291906126fd565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561148b5780601f106114605761010080835404028352916020019161148b565b820191906000526020600020905b81548152906001019060200180831161146e57829003601f168201915b505050505090509392505050565b6060828290506040519080825280602002602001820160405280156114d257816020015b60608152602001906001900390816114bd5790505b50905060008090505b838390508110156115e557600060603073ffffffffffffffffffffffffffffffffffffffff1686868581811061150d57fe5b905060200281018035600160200383360303811261152a57600080fd5b8083019250508135905060208201915067ffffffffffffffff81111561154f57600080fd5b60018102360382131561156157600080fd5b60405161156f9291906131dd565b600060405180830381855af49150503d80600081146115aa576040519150601f19603f3d011682016040523d82523d6000602084013e6115af565b606091505b5091509150816115be57600080fd5b808484815181106115cb57fe5b6020026020010181905250505080806001019150506114db565b5080905092915050565b806115f9816119e7565b61160257600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ff5780601f106116d4576101008083540402835291602001916116ff565b820191906000526020600020905b8154815290600101906020018083116116e257829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b8161174f816119e7565b61175857600080fd5b61176c83603c611767856120a5565b6112be565b505050565b8261177b816119e7565b61178457600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051611875919061323b565b60405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561193d5780601f106119125761010080835404028352916020019161193d565b820191906000526020600020905b81548152906001019060200180831161192057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119e057506119df826120f0565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b8152600401611a4591906132c9565b60206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a9591908101906129af565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611b685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611b786125b2565b828160000181905250818160c0018181525050611b9481611f6e565b92915050565b6000816000015151826020015110159050919050565b6060611be08260200151611bcc84600001518560200151612151565b84600001516121ac9092919063ffffffff16565b9050919050565b6060611c108260a001518360a001518460c001510384600001516121ac9092919063ffffffff16565b9050919050565b600081518351148015611c365750611c35836000846000875161221f565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611c798686896121ac9092919063ffffffff16565b90508315611dee576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002080546001816001161561010002031660029004905014611d5557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611daf919061277d565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611de192919061336e565b60405180910390a2611f62565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501415611ec257600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190611f249291906126fd565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611f599392919061339e565b60405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110611f915761207f565b6000611fa582600001518360200151612151565b8260200151019050611fc481836000015161224390919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050611ff481836000015161224390919063ffffffff16565b826060019061ffff16908161ffff168152505060028101905061202481836000015161226990919063ffffffff16565b826080019063ffffffff16908163ffffffff1681525050600481019050600061205a82846000015161224390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b6000601482511461209257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f1916602001820160405280156120db5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214a575061214982612291565b5b9050919050565b6000808290505b6001156121a0578351811061216957fe5b600061217e82866122fe90919063ffffffff16565b60ff1690506001810182019150600081141561219a57506121a0565b50612158565b82810391505092915050565b6060835182840111156121be57600080fd5b6060826040519080825280601f01601f1916602001820160405280156121f35781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612212828287612322565b8293505050509392505050565b600061222c84848461236b565b61223787878561236b565b14905095945050505050565b6000825160028301111561225657600080fd5b61ffff8260028501015116905092915050565b6000825160048301111561227c57600080fd5b63ffffffff8260048501015116905092915050565b600060405161229f90613226565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f757506122f68261238e565b5b9050919050565b600082828151811061230c57fe5b602001015160f81c60f81b60f81c905092915050565b5b602081106123465781518352602083019250602082019150602081039050612323565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111561237d57600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123e857506123e7826123ef565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612449575061244882612450565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124e9575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124f957506124f882612500565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061255a575061255982612561565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061263e57803560ff191683800117855561266c565b8280016001018555821561266c579182015b8281111561266b578235825591602001919060010190612650565b5b50905061267991906127c5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126be57803560ff19168380011785556126ec565b828001600101855582156126ec579182015b828111156126eb5782358255916020019190600101906126d0565b5b5090506126f991906127c5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061273e57805160ff191683800117855561276c565b8280016001018555821561276c579182015b8281111561276b578251825591602001919060010190612750565b5b50905061277991906127c5565b5090565b50805460018160011615610100020316600290046000825580601f106127a357506127c2565b601f0160209004906000526020600020908101906127c191906127c5565b5b50565b6127e791905b808211156127e35760008160009055506001016127cb565b5090565b90565b6000813590506127f981613679565b92915050565b60008151905061280e81613679565b92915050565b60008083601f84011261282657600080fd5b8235905067ffffffffffffffff81111561283f57600080fd5b60208301915083602082028301111561285757600080fd5b9250929050565b60008135905061286d81613690565b92915050565b600081359050612882816136a7565b92915050565b600081359050612897816136be565b92915050565b60008083601f8401126128af57600080fd5b8235905067ffffffffffffffff8111156128c857600080fd5b6020830191508360018202830111156128e057600080fd5b9250929050565b600082601f8301126128f857600080fd5b813561290b61290682613486565b613459565b9150808252602083016020830185838301111561292757600080fd5b612932838284613626565b50505092915050565b60008083601f84011261294d57600080fd5b8235905067ffffffffffffffff81111561296657600080fd5b60208301915083600182028301111561297e57600080fd5b9250929050565b600081359050612994816136d5565b92915050565b6000813590506129a9816136ec565b92915050565b6000602082840312156129c157600080fd5b60006129cf848285016127ff565b91505092915050565b600080602083850312156129eb57600080fd5b600083013567ffffffffffffffff811115612a0557600080fd5b612a1185828601612814565b92509250509250929050565b600060208284031215612a2f57600080fd5b6000612a3d84828501612873565b91505092915050565b60008060408385031215612a5957600080fd5b6000612a6785828601612873565b9250506020612a78858286016127ea565b9150509250929050565b600080600060608486031215612a9757600080fd5b6000612aa586828701612873565b9350506020612ab6868287016127ea565b9250506040612ac7868287016127ea565b9150509250925092565b600080600060608486031215612ae657600080fd5b6000612af486828701612873565b9350506020612b05868287016127ea565b9250506040612b168682870161285e565b9150509250925092565b60008060408385031215612b3357600080fd5b6000612b4185828601612873565b9250506020612b5285828601612873565b9150509250929050565b600080600060608486031215612b7157600080fd5b6000612b7f86828701612873565b9350506020612b9086828701612873565b9250506040612ba186828701612873565b9150509250925092565b600080600060608486031215612bc057600080fd5b6000612bce86828701612873565b9350506020612bdf86828701612873565b9250506040612bf086828701612985565b9150509250925092565b60008060408385031215612c0d57600080fd5b6000612c1b85828601612873565b9250506020612c2c85828601612888565b9150509250929050565b600080600060608486031215612c4b57600080fd5b6000612c5986828701612873565b9350506020612c6a86828701612888565b9250506040612c7b868287016127ea565b9150509250925092565b600080600060408486031215612c9a57600080fd5b6000612ca886828701612873565b935050602084013567ffffffffffffffff811115612cc557600080fd5b612cd18682870161289d565b92509250509250925092565b600080600060408486031215612cf257600080fd5b6000612d0086828701612873565b935050602084013567ffffffffffffffff811115612d1d57600080fd5b612d298682870161293b565b92509250509250925092565b600080600080600060608688031215612d4d57600080fd5b6000612d5b88828901612873565b955050602086013567ffffffffffffffff811115612d7857600080fd5b612d848882890161293b565b9450945050604086013567ffffffffffffffff811115612da357600080fd5b612daf8882890161293b565b92509250509295509295909350565b60008060408385031215612dd157600080fd5b6000612ddf85828601612873565b9250506020612df08582860161299a565b9150509250929050565b60008060008060608587031215612e1057600080fd5b6000612e1e87828801612873565b9450506020612e2f8782880161299a565b935050604085013567ffffffffffffffff811115612e4c57600080fd5b612e588782880161289d565b925092505092959194509250565b600080600060608486031215612e7b57600080fd5b6000612e8986828701612873565b9350506020612e9a8682870161299a565b925050604084013567ffffffffffffffff811115612eb757600080fd5b612ec3868287016128e7565b9150509250925092565b600060208284031215612edf57600080fd5b6000612eed84828501612888565b91505092915050565b6000612f028383613095565b905092915050565b612f13816135f0565b82525050565b612f2281613564565b82525050565b612f3181613552565b82525050565b6000612f42826134bf565b612f4c81856134f8565b935083602082028501612f5e856134b2565b8060005b85811015612f9a5784840389528151612f7b8582612ef6565b9450612f86836134eb565b925060208a01995050600181019050612f62565b50829750879550505050505092915050565b612fb581613576565b82525050565b612fc481613582565b82525050565b612fd38161358c565b82525050565b6000612fe5838561351a565b9350612ff2838584613626565b612ffb83613668565b840190509392505050565b6000613012838561352b565b935061301f838584613626565b82840190509392505050565b6000613036826134d5565b613040818561351a565b9350613050818560208601613635565b61305981613668565b840191505092915050565b600061306f826134d5565b613079818561352b565b9350613089818560208601613635565b80840191505092915050565b60006130a0826134ca565b6130aa8185613509565b93506130ba818560208601613635565b6130c381613668565b840191505092915050565b60006130da8385613536565b93506130e7838584613626565b6130f083613668565b840190509392505050565b60006131078385613547565b9350613114838584613626565b82840190509392505050565b600061312b826134e0565b6131358185613536565b9350613145818560208601613635565b61314e81613668565b840191505092915050565b6000613166602483613547565b91507f696e74657266616365496d706c656d656e74657228627974657333322c62797460008301527f65733429000000000000000000000000000000000000000000000000000000006020830152602482019050919050565b6131c8816135b8565b82525050565b6131d7816135e6565b82525050565b60006131ea828486613006565b91508190509392505050565b60006132028284613064565b915081905092915050565b600061321a8284866130fb565b91508190509392505050565b600061323182613159565b9150819050919050565b60006020820190506132506000830184612f28565b92915050565b600060208201905061326b6000830184612f0a565b92915050565b60006020820190506132866000830184612f19565b92915050565b600060208201905081810360008301526132a68184612f37565b905092915050565b60006020820190506132c36000830184612fac565b92915050565b60006020820190506132de6000830184612fbb565b92915050565b60006040820190506132f96000830185612fbb565b6133066020830184612fbb565b9392505050565b60006020820190506133226000830184612fca565b92915050565b60006020820190508181036000830152613343818486612fd9565b90509392505050565b60006020820190508181036000830152613366818461302b565b905092915050565b60006040820190508181036000830152613388818561302b565b905061339760208301846131bf565b9392505050565b600060608201905081810360008301526133b8818661302b565b90506133c760208301856131bf565b81810360408301526133d9818461302b565b9050949350505050565b600060208201905081810360008301526133fe8184866130ce565b90509392505050565b600060208201905081810360008301526134218184613120565b905092915050565b600060408201905061343e60008301856131ce565b8181036020830152613450818461302b565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561347c57600080fd5b8060405250919050565b600067ffffffffffffffff82111561349d57600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061355d826135c6565b9050919050565b600061356f826135c6565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006135fb82613602565b9050919050565b600061360d82613614565b9050919050565b600061361f826135c6565b9050919050565b82818337600083830152505050565b60005b83811015613653578082015181840152602081019050613638565b83811115613662576000848401525b50505050565b6000601f19601f8301169050919050565b61368281613552565b811461368d57600080fd5b50565b61369981613576565b81146136a457600080fd5b50565b6136b081613582565b81146136bb57600080fd5b50565b6136c78161358c565b81146136d257600080fd5b50565b6136de816135b8565b81146136e957600080fd5b50565b6136f5816135e6565b811461370057600080fd5b5056fea265627a7a7230582049ebf27fa2f4353ae0dc98302f101fe3256ef5930b91c52222dcf860d94f3c326c6578706572696d656e74616cf50037",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063691f3431116100c3578063bc1c58d11161007c578063bc1c58d11461040a578063c86902331461043a578063d5fa2b001461046b578063e59d895d14610487578063f1cb7e06146104a3578063f86bc879146104d357610158565b8063691f34311461032657806377372213146103565780638b95dd7114610372578063a8fa56821461038e578063ac9650d8146103be578063ad5780af146103ee57610158565b8063304e6ade11610115578063304e6ade146102425780633b3b57de1461025e5780633e9ce7941461028e5780634cbf6ba4146102aa57806359d1d43c146102da578063623195b01461030a57610158565b806301ffc9a71461015d5780630af179d71461018d57806310f13a8c146101a9578063124a319c146101c55780632203ab56146101f557806329cd62ea14610226575b600080fd5b61017760048036036101729190810190612ecd565b610503565b60405161018491906132ae565b60405180910390f35b6101a760048036036101a29190810190612c85565b610564565b005b6101c360048036036101be9190810190612d35565b610792565b005b6101df60048036036101da9190810190612bfa565b610840565b6040516101ec919061323b565b60405180910390f35b61020f600480360361020a9190810190612dbe565b610c2b565b60405161021d929190613429565b60405180910390f35b610240600480360361023b9190810190612b5c565b610d7a565b005b61025c60048036036102579190810190612c85565b610e0c565b005b61027860048036036102739190810190612a1d565b610e82565b6040516102859190613271565b60405180910390f35b6102a860048036036102a39190810190612ad1565b610eb9565b005b6102c460048036036102bf9190810190612b20565b610fc9565b6040516102d191906132ae565b60405180910390f35b6102f460048036036102ef9190810190612cdd565b611031565b6040516103019190613407565b60405180910390f35b610324600480360361031f9190810190612dfa565b611106565b005b610340600480360361033b9190810190612a1d565b611193565b60405161034d9190613407565b60405180910390f35b610370600480360361036b9190810190612cdd565b611248565b005b61038c60048036036103879190810190612e66565b6112be565b005b6103a860048036036103a39190810190612bab565b611394565b6040516103b5919061334c565b60405180910390f35b6103d860048036036103d391908101906129d8565b611499565b6040516103e5919061328c565b60405180910390f35b61040860048036036104039190810190612a1d565b6115ef565b005b610424600480360361041f9190810190612a1d565b611656565b604051610431919061334c565b60405180910390f35b610454600480360361044f9190810190612a1d565b61170b565b6040516104629291906132e4565b60405180910390f35b61048560048036036104809190810190612a46565b611745565b005b6104a1600480360361049c9190810190612c36565b611771565b005b6104bd60048036036104b89190810190612dbe565b611883565b6040516104ca919061334c565b60405180910390f35b6104ed60048036036104e89190810190612a82565b61194a565b6040516104fa91906132ae565b60405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055d575061055c82611986565b5b9050919050565b8261056e816119e7565b61057757600080fd5b60008090506000809050606080600061058e6125b2565b6105e660008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611b7090919063ffffffff16565b90505b6105f281611b9a565b61071f5760008661ffff16141561064e578060400151955061061381611bb0565b93508360405160200161062691906131f6565b60405160208183030381529060405280519060200120915061064781611be7565b9250610711565b606061065982611bb0565b9050816040015161ffff168761ffff1614158061068657506106848186611c1790919063ffffffff16565b155b1561070f576106e88b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611c3e565b81604001519650816020015195508094508480519060200120925061070c82611be7565b93505b505b61071a81611f6e565b6105e9565b50600083511115610787576107868984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611c3e565b5b505050505050505050565b8461079c816119e7565b6107a557600080fd5b82826009600089815260200190815260200160002087876040516107ca92919061320d565b908152602001604051809103902091906107e59291906125fd565b5084846040516107f692919061320d565b6040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a755087876040516108309291906133e3565b60405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109055780915050610c25565b600061091085610e82565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095257600092505050610c25565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b604051602401610985919061330d565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a0f91906131f6565b600060405180830381855afa9150503d8060008114610a4a576040519150601f19603f3d011682016040523d82523d6000602084013e610a4f565b606091505b5091509150811580610a62575060208151105b80610aa95750600060f81b81601f81518110610a7a57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610abb576000945050505050610c25565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ae3919061330d565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610b6d91906131f6565b600060405180830381855afa9150503d8060008114610ba8576040519150601f19603f3d011682016040523d82523d6000602084013e610bad565b606091505b508092508193505050811580610bc4575060208151105b80610c0b5750600060f81b81601f81518110610bdc57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610c1d576000945050505050610c25565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111610d5757600085821614158015610c8c57506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b15610d4b5780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b50505050509050935093505050610d73565b600181901b9050610c4c565b5060006040518060200160405280600081525081915092509250505b9250929050565b82610d84816119e7565b610d8d57600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051610dfe9291906132e4565b60405180910390a250505050565b82610e16816119e7565b610e1f57600080fd5b8282600260008781526020019081526020016000209190610e4192919061267d565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610e74929190613328565b60405180910390a250505050565b60006060610e9183603c611883565b9050600081511415610ea7576000915050610eb4565b610eb081612082565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051610fbc91906132ae565b60405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405161105692919061320d565b90815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110f85780601f106110cd576101008083540402835291602001916110f8565b820191906000526020600020905b8154815290600101906020018083116110db57829003601f168201915b505050505090509392505050565b83611110816119e7565b61111957600080fd5b60008460018603161461112b57600080fd5b82826000808881526020019081526020016000206000878152602001908152602001600020919061115d92919061267d565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561123c5780601f106112115761010080835404028352916020019161123c565b820191906000526020600020905b81548152906001019060200180831161121f57829003601f168201915b50505050509050919050565b82611252816119e7565b61125b57600080fd5b828260076000878152602001908152602001600020919061127d9291906125fd565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784846040516112b09291906133e3565b60405180910390a250505050565b826112c8816119e7565b6112d157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484604051611303929190613429565b60405180910390a2603c83141561135557837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261133f84612082565b60405161134c9190613256565b60405180910390a25b81600160008681526020019081526020016000206000858152602001908152602001600020908051906020019061138d9291906126fd565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561148b5780601f106114605761010080835404028352916020019161148b565b820191906000526020600020905b81548152906001019060200180831161146e57829003601f168201915b505050505090509392505050565b6060828290506040519080825280602002602001820160405280156114d257816020015b60608152602001906001900390816114bd5790505b50905060008090505b838390508110156115e557600060603073ffffffffffffffffffffffffffffffffffffffff1686868581811061150d57fe5b905060200281018035600160200383360303811261152a57600080fd5b8083019250508135905060208201915067ffffffffffffffff81111561154f57600080fd5b60018102360382131561156157600080fd5b60405161156f9291906131dd565b600060405180830381855af49150503d80600081146115aa576040519150601f19603f3d011682016040523d82523d6000602084013e6115af565b606091505b5091509150816115be57600080fd5b808484815181106115cb57fe5b6020026020010181905250505080806001019150506114db565b5080905092915050565b806115f9816119e7565b61160257600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ff5780601f106116d4576101008083540402835291602001916116ff565b820191906000526020600020905b8154815290600101906020018083116116e257829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b8161174f816119e7565b61175857600080fd5b61176c83603c611767856120a5565b6112be565b505050565b8261177b816119e7565b61178457600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051611875919061323b565b60405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561193d5780601f106119125761010080835404028352916020019161193d565b820191906000526020600020905b81548152906001019060200180831161192057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119e057506119df826120f0565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b8152600401611a4591906132c9565b60206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a9591908101906129af565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611b685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611b786125b2565b828160000181905250818160c0018181525050611b9481611f6e565b92915050565b6000816000015151826020015110159050919050565b6060611be08260200151611bcc84600001518560200151612151565b84600001516121ac9092919063ffffffff16565b9050919050565b6060611c108260a001518360a001518460c001510384600001516121ac9092919063ffffffff16565b9050919050565b600081518351148015611c365750611c35836000846000875161221f565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611c798686896121ac9092919063ffffffff16565b90508315611dee576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002080546001816001161561010002031660029004905014611d5557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611daf919061277d565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611de192919061336e565b60405180910390a2611f62565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501415611ec257600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190611f249291906126fd565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611f599392919061339e565b60405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110611f915761207f565b6000611fa582600001518360200151612151565b8260200151019050611fc481836000015161224390919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050611ff481836000015161224390919063ffffffff16565b826060019061ffff16908161ffff168152505060028101905061202481836000015161226990919063ffffffff16565b826080019063ffffffff16908163ffffffff1681525050600481019050600061205a82846000015161224390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b6000601482511461209257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f1916602001820160405280156120db5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214a575061214982612291565b5b9050919050565b6000808290505b6001156121a0578351811061216957fe5b600061217e82866122fe90919063ffffffff16565b60ff1690506001810182019150600081141561219a57506121a0565b50612158565b82810391505092915050565b6060835182840111156121be57600080fd5b6060826040519080825280601f01601f1916602001820160405280156121f35781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612212828287612322565b8293505050509392505050565b600061222c84848461236b565b61223787878561236b565b14905095945050505050565b6000825160028301111561225657600080fd5b61ffff8260028501015116905092915050565b6000825160048301111561227c57600080fd5b63ffffffff8260048501015116905092915050565b600060405161229f90613226565b60405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f757506122f68261238e565b5b9050919050565b600082828151811061230c57fe5b602001015160f81c60f81b60f81c905092915050565b5b602081106123465781518352602083019250602082019150602081039050612323565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111561237d57600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123e857506123e7826123ef565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612449575061244882612450565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124e9575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124f957506124f882612500565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061255a575061255982612561565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061263e57803560ff191683800117855561266c565b8280016001018555821561266c579182015b8281111561266b578235825591602001919060010190612650565b5b50905061267991906127c5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126be57803560ff19168380011785556126ec565b828001600101855582156126ec579182015b828111156126eb5782358255916020019190600101906126d0565b5b5090506126f991906127c5565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061273e57805160ff191683800117855561276c565b8280016001018555821561276c579182015b8281111561276b578251825591602001919060010190612750565b5b50905061277991906127c5565b5090565b50805460018160011615610100020316600290046000825580601f106127a357506127c2565b601f0160209004906000526020600020908101906127c191906127c5565b5b50565b6127e791905b808211156127e35760008160009055506001016127cb565b5090565b90565b6000813590506127f981613679565b92915050565b60008151905061280e81613679565b92915050565b60008083601f84011261282657600080fd5b8235905067ffffffffffffffff81111561283f57600080fd5b60208301915083602082028301111561285757600080fd5b9250929050565b60008135905061286d81613690565b92915050565b600081359050612882816136a7565b92915050565b600081359050612897816136be565b92915050565b60008083601f8401126128af57600080fd5b8235905067ffffffffffffffff8111156128c857600080fd5b6020830191508360018202830111156128e057600080fd5b9250929050565b600082601f8301126128f857600080fd5b813561290b61290682613486565b613459565b9150808252602083016020830185838301111561292757600080fd5b612932838284613626565b50505092915050565b60008083601f84011261294d57600080fd5b8235905067ffffffffffffffff81111561296657600080fd5b60208301915083600182028301111561297e57600080fd5b9250929050565b600081359050612994816136d5565b92915050565b6000813590506129a9816136ec565b92915050565b6000602082840312156129c157600080fd5b60006129cf848285016127ff565b91505092915050565b600080602083850312156129eb57600080fd5b600083013567ffffffffffffffff811115612a0557600080fd5b612a1185828601612814565b92509250509250929050565b600060208284031215612a2f57600080fd5b6000612a3d84828501612873565b91505092915050565b60008060408385031215612a5957600080fd5b6000612a6785828601612873565b9250506020612a78858286016127ea565b9150509250929050565b600080600060608486031215612a9757600080fd5b6000612aa586828701612873565b9350506020612ab6868287016127ea565b9250506040612ac7868287016127ea565b9150509250925092565b600080600060608486031215612ae657600080fd5b6000612af486828701612873565b9350506020612b05868287016127ea565b9250506040612b168682870161285e565b9150509250925092565b60008060408385031215612b3357600080fd5b6000612b4185828601612873565b9250506020612b5285828601612873565b9150509250929050565b600080600060608486031215612b7157600080fd5b6000612b7f86828701612873565b9350506020612b9086828701612873565b9250506040612ba186828701612873565b9150509250925092565b600080600060608486031215612bc057600080fd5b6000612bce86828701612873565b9350506020612bdf86828701612873565b9250506040612bf086828701612985565b9150509250925092565b60008060408385031215612c0d57600080fd5b6000612c1b85828601612873565b9250506020612c2c85828601612888565b9150509250929050565b600080600060608486031215612c4b57600080fd5b6000612c5986828701612873565b9350506020612c6a86828701612888565b9250506040612c7b868287016127ea565b9150509250925092565b600080600060408486031215612c9a57600080fd5b6000612ca886828701612873565b935050602084013567ffffffffffffffff811115612cc557600080fd5b612cd18682870161289d565b92509250509250925092565b600080600060408486031215612cf257600080fd5b6000612d0086828701612873565b935050602084013567ffffffffffffffff811115612d1d57600080fd5b612d298682870161293b565b92509250509250925092565b600080600080600060608688031215612d4d57600080fd5b6000612d5b88828901612873565b955050602086013567ffffffffffffffff811115612d7857600080fd5b612d848882890161293b565b9450945050604086013567ffffffffffffffff811115612da357600080fd5b612daf8882890161293b565b92509250509295509295909350565b60008060408385031215612dd157600080fd5b6000612ddf85828601612873565b9250506020612df08582860161299a565b9150509250929050565b60008060008060608587031215612e1057600080fd5b6000612e1e87828801612873565b9450506020612e2f8782880161299a565b935050604085013567ffffffffffffffff811115612e4c57600080fd5b612e588782880161289d565b925092505092959194509250565b600080600060608486031215612e7b57600080fd5b6000612e8986828701612873565b9350506020612e9a8682870161299a565b925050604084013567ffffffffffffffff811115612eb757600080fd5b612ec3868287016128e7565b9150509250925092565b600060208284031215612edf57600080fd5b6000612eed84828501612888565b91505092915050565b6000612f028383613095565b905092915050565b612f13816135f0565b82525050565b612f2281613564565b82525050565b612f3181613552565b82525050565b6000612f42826134bf565b612f4c81856134f8565b935083602082028501612f5e856134b2565b8060005b85811015612f9a5784840389528151612f7b8582612ef6565b9450612f86836134eb565b925060208a01995050600181019050612f62565b50829750879550505050505092915050565b612fb581613576565b82525050565b612fc481613582565b82525050565b612fd38161358c565b82525050565b6000612fe5838561351a565b9350612ff2838584613626565b612ffb83613668565b840190509392505050565b6000613012838561352b565b935061301f838584613626565b82840190509392505050565b6000613036826134d5565b613040818561351a565b9350613050818560208601613635565b61305981613668565b840191505092915050565b600061306f826134d5565b613079818561352b565b9350613089818560208601613635565b80840191505092915050565b60006130a0826134ca565b6130aa8185613509565b93506130ba818560208601613635565b6130c381613668565b840191505092915050565b60006130da8385613536565b93506130e7838584613626565b6130f083613668565b840190509392505050565b60006131078385613547565b9350613114838584613626565b82840190509392505050565b600061312b826134e0565b6131358185613536565b9350613145818560208601613635565b61314e81613668565b840191505092915050565b6000613166602483613547565b91507f696e74657266616365496d706c656d656e74657228627974657333322c62797460008301527f65733429000000000000000000000000000000000000000000000000000000006020830152602482019050919050565b6131c8816135b8565b82525050565b6131d7816135e6565b82525050565b60006131ea828486613006565b91508190509392505050565b60006132028284613064565b915081905092915050565b600061321a8284866130fb565b91508190509392505050565b600061323182613159565b9150819050919050565b60006020820190506132506000830184612f28565b92915050565b600060208201905061326b6000830184612f0a565b92915050565b60006020820190506132866000830184612f19565b92915050565b600060208201905081810360008301526132a68184612f37565b905092915050565b60006020820190506132c36000830184612fac565b92915050565b60006020820190506132de6000830184612fbb565b92915050565b60006040820190506132f96000830185612fbb565b6133066020830184612fbb565b9392505050565b60006020820190506133226000830184612fca565b92915050565b60006020820190508181036000830152613343818486612fd9565b90509392505050565b60006020820190508181036000830152613366818461302b565b905092915050565b60006040820190508181036000830152613388818561302b565b905061339760208301846131bf565b9392505050565b600060608201905081810360008301526133b8818661302b565b90506133c760208301856131bf565b81810360408301526133d9818461302b565b9050949350505050565b600060208201905081810360008301526133fe8184866130ce565b90509392505050565b600060208201905081810360008301526134218184613120565b905092915050565b600060408201905061343e60008301856131ce565b8181036020830152613450818461302b565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561347c57600080fd5b8060405250919050565b600067ffffffffffffffff82111561349d57600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061355d826135c6565b9050919050565b600061356f826135c6565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006135fb82613602565b9050919050565b600061360d82613614565b9050919050565b600061361f826135c6565b9050919050565b82818337600083830152505050565b60005b83811015613653578082015181840152602081019050613638565b83811115613662576000848401525b50505050565b6000601f19601f8301169050919050565b61368281613552565b811461368d57600080fd5b50565b61369981613576565b81146136a457600080fd5b50565b6136b081613582565b81146136bb57600080fd5b50565b6136c78161358c565b81146136d257600080fd5b50565b6136de816135b8565b81146136e957600080fd5b50565b6136f5816135e6565b811461370057600080fd5b5056fea265627a7a7230582049ebf27fa2f4353ae0dc98302f101fe3256ef5930b91c52222dcf860d94f3c326c6578706572696d656e74616cf50037",
  "sourceMap": "520:2174:3:-;;;1151:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;1151:56:3;;;;;;;;;;;;;;;;;;;;;;1196:4;1190:3;;:10;;;;;;;;;;;;;;;;;;1151:56;520:2174;;5:158:-1;;101:6;95:13;86:22;;113:45;152:5;113:45;;;80:83;;;;;170:287;;297:2;285:9;276:7;272:23;268:32;265:2;;;313:1;310;303:12;265:2;348:1;365:76;433:7;424:6;413:9;409:22;365:76;;;355:86;;327:120;259:198;;;;;464:91;;526:24;544:5;526:24;;;515:35;;509:46;;;;562:103;;636:24;654:5;636:24;;;625:35;;619:46;;;;672:121;;745:42;738:5;734:54;723:65;;717:76;;;;800:141;881:36;911:5;881:36;;;874:5;871:47;861:2;;932:1;929;922:12;861:2;855:86;;520:2174:3;;;;;;;",
  "deployedSourceMap": "520:2174:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;520:2174:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107:169:13;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2403:1263:9;;;;;;;;;;;;;;;;:::i;:::-;;573:184:13;;;;;;;;;;;;;;;;:::i;:::-;;1721:953:10;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1195:454:6;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;612:169:12;;;;;;;;;;;;;;;;:::i;:::-;;505:166:8;;;;;;;;;;;;;;;;:::i;:::-;;972:228:7;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1892:231:3;;;;;;;;;;;;;;;;:::i;:::-;;4450:153:9;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;974:127:13;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;582:292:6;;;;;;;;;;;;;;;;:::i;:::-;;844:101:11;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;492:152;;;;;;;;;;;;;;;;:::i;:::-;;1206:286:7;;;;;;;;;;;;;;;;:::i;:::-;;4068:168:9;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2326:366:3;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4742:128:9;;;;;;;;;;;;;;;;:::i;:::-;;838:108:8;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1023:133:12;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;681:132:7;;;;;;;;;;;;;;;;:::i;:::-;;858:226:10;;;;;;;;;;;;;;;;:::i;:::-;;1498:127:7;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;943:80:3;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1107:169:13;1174:4;144:10;1212:17;;1197:32;;;:11;:32;;;;:72;;;;1233:36;1257:11;1233:23;:36::i;:::-;1197:72;1190:79;;1107:169;;;:::o;2403:1263:9:-;2481:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;2497:15:9;2515:1;2497:19;;2526:14;2543:1;2526:18;;2554:17;2581:18;2609:16;2701:30;;:::i;:::-;2734:18;2750:1;2734:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2734:15:9;;;;;;;;:18;;;;:::i;:::-;2701:51;;2696:821;2755:11;:4;:9;:11::i;:::-;2696:821;;2811:1;2799:8;:13;;;2795:712;;;2843:4;:12;;;2832:23;;2880:11;:4;:9;:11::i;:::-;2873:18;;2947:4;2930:22;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2930:22:9;;;2920:33;;;;;;2909:44;;2985:12;:4;:10;:12::i;:::-;2971:27;;2795:712;;;3037:20;3060:11;:4;:9;:11::i;:::-;3037:34;;3105:4;:12;;;3093:24;;:8;:24;;;;:49;;;;3122:20;3134:7;3122:4;:11;;:20;;;;:::i;:::-;3121:21;3093:49;3089:404;;;3166:88;3178:4;3184;3190:8;3200:4;;3166:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3166:88:9;;;;;;3206:6;3228;3214:4;:11;;;:20;3252:1;3236:5;:12;:17;3166:11;:88::i;:::-;3287:4;:12;;;3276:23;;3330:4;:11;;;3321:20;;3370:7;3363:14;;3420:4;3410:15;;;;;;3399:26;;3461:12;:4;:10;:12::i;:::-;3447:27;;3089:404;2795:712;;2768:11;:4;:9;:11::i;:::-;2696:821;;;;3544:1;3530:4;:11;:15;3526:134;;;3561:88;3573:4;3579;3585:8;3595:4;;3561:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3561:88:9;;;;;;3601:6;3623;3609:4;;:11;;:20;3647:1;3631:5;:12;:17;3561:11;:88::i;:::-;3526:134;400:1:5;;;;;2403:1263:9;;;;:::o;573:184:13:-;668:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;703:5:13;;684;:11;690:4;684:11;;;;;;;;;;;696:3;;684:16;;;;;;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;741:3;;723:27;;;;;;;;;;;;;;;;735:4;723:27;746:3;;723:27;;;;;;;;;;;;;;;;573:184;;;;;;:::o;1721:953:10:-;1808:7;1827:19;1849:10;:16;1860:4;1849:16;;;;;;;;;;;:29;1866:11;1849:29;;;;;;;;;;;;;;;;;;;;;;;;;;;1827:51;;1914:1;1891:25;;:11;:25;;;1888:73;;1939:11;1932:18;;;;;1888:73;1971:9;1983:10;1988:4;1983;:10::i;:::-;1971:22;;2019:1;2006:15;;:1;:15;;;2003:62;;;2052:1;2037:17;;;;;;2003:62;2076:12;2090:23;2117:1;:12;;304:10;2183:17;;2130:71;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2130:71:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2130:71:10;2117:85;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2075:127:10;;;;2216:7;2215:8;:34;;;;2247:2;2227:10;:17;:22;2215:34;:57;;;;2271:1;2253:19;;:10;2264:2;2253:14;;;;;;;;;;;;;;;;:19;;;;2215:57;2212:151;;;2350:1;2335:17;;;;;;;;2212:151;2397:1;:12;;2463:11;2410:65;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2410:65:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2410:65:10;2397:79;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2373:103:10;;;;;;;;2490:7;2489:8;:34;;;;2521:2;2501:10;:17;:22;2489:34;:57;;;;2545:1;2527:19;;:10;2538:2;2527:14;;;;;;;;;;;;;;;;:19;;;;2489:57;2486:163;;;2636:1;2621:17;;;;;;;;2486:163;2666:1;2659:8;;;;;;1721:953;;;;;:::o;1195:454:6:-;1267:7;1276:12;1300:38;1341:4;:10;1346:4;1341:10;;;;;;;;;;;1300:51;;1367:19;1389:1;1367:23;;1362:249;1407:12;1392:11;:27;1362:249;;1490:1;1473:12;1459:11;:26;1458:33;;:67;;;;;1524:1;1495:6;:19;1502:11;1495:19;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:30;1458:67;1454:147;;;1553:11;1566:6;:19;1573:11;1566:19;;;;;;;;;;;1545:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1454:147;1437:1;1421:17;;;;;1362:249;;;;1629:1;1632:9;;;;;;;;;;;;1621:21;;;;;;;;1195:454;;;;;;:::o;612:169:12:-;687:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;719:15:12;;;;;;;;729:1;719:15;;;;732:1;719:15;;;703:7;:13;711:4;703:13;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;763:4;749:25;769:1;772;749:25;;;;;;;;;;;;;;;;612:169;;;;:::o;505:166:8:-;584:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;615:4:8;;600:6;:12;607:4;600:12;;;;;;;;;;;:19;;;;;;;:::i;:::-;;653:4;634:30;659:4;;634:30;;;;;;;;;;;;;;;;505:166;;;;:::o;972:228:7:-;1021:15;1048:14;1065:25;1070:4;261:2;1065:4;:25::i;:::-;1048:42;;1115:1;1103;:8;:13;1100:60;;;1147:1;1132:17;;;;;1100:60;1176:17;1191:1;1176:14;:17::i;:::-;1169:24;;;972:228;;;;:::o;1892:231:3:-;2029:12;1986:14;:20;2001:4;1986:20;;;;;;;;;;;:32;2007:10;1986:32;;;;;;;;;;;;;;;:40;2019:6;1986:40;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;2095:6;2056:60;;2083:10;2056:60;;2077:4;2056:60;2103:12;2056:60;;;;;;;;;;;;;;;1892:231;;;:::o;4450:153:9:-;4522:4;4594:1;4546:16;:22;4563:4;4546:22;;;;;;;;;;;:38;4569:8;:14;4578:4;4569:14;;;;;;;;;;;;4546:38;;;;;;;;;;;:44;4585:4;4546:44;;;;;;;;;;;;;;;;;;;;;:49;;;;4538:58;;4450:153;;;;:::o;974:127:13:-;1046:13;1078:5;:11;1084:4;1078:11;;;;;;;;;;;1090:3;;1078:16;;;;;;;;;;;;;;;;;;;;;1071:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;974:127;;;;;:::o;582:292:6:-;674:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;780:1:6;764:11;759:1;745:11;:15;744:31;743:38;735:47;;;;;;819:4;;793;:10;798:4;793:10;;;;;;;;;;;:23;804:11;793:23;;;;;;;;;;;:30;;;;;;;:::i;:::-;;855:11;849:4;838:29;;;;;;;;;;582:292;;;;;:::o;844:101:11:-;895:13;927:5;:11;933:4;927:11;;;;;;;;;;;920:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:101;;;:::o;492:152::-;565:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;595:4:11;;581:5;:11;587:4;581:11;;;;;;;;;;;:18;;;;;;;:::i;:::-;;626:4;614:23;632:4;;614:23;;;;;;;;;;;;;;;;492:152;;;;:::o;1206:286:7:-;1286:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;1322:4:7;1307:33;1328:8;1338:1;1307:33;;;;;;;;;;;;;;;;261:2;1353:8;:25;1350:96;;;1411:4;1399:36;1417:17;1432:1;1417:14;:17::i;:::-;1399:36;;;;;;;;;;;;;;;1350:96;1484:1;1455:10;:16;1466:4;1455:16;;;;;;;;;;;:26;1472:8;1455:26;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;1206:286;;;;:::o;4068:168:9:-;4153:12;4184:7;:13;4192:4;4184:13;;;;;;;;;;;:29;4198:8;:14;4207:4;4198:14;;;;;;;;;;;;4184:29;;;;;;;;;;;:35;4214:4;4184:35;;;;;;;;;;;:45;4220:8;4184:45;;;;;;;;;;;;;;;4177:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4068:168;;;;;:::o;2326:366:3:-;2385:22;2441:4;;:11;;2429:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2419:34;;2467:6;2476:1;2467:10;;2463:199;2483:4;;:11;;2479:1;:15;2463:199;;;2516:12;2530:19;2561:4;2553:26;;2580:4;;2585:1;2580:7;;;;;;;;;;;;;43:11:-1;30:25;137:1;131:4;127:12;116:8;100:14;96:29;92:48;72:18;68:73;58:2;;155:1;152;145:12;58:2;188:18;178:8;174:33;162:45;;0:210;29:8;16:22;6:32;;69:4;59:8;55:19;43:31;;93:18;85:6;82:30;79:2;;;125:1;122;115:12;79:2;183:3;175:6;171:16;155:14;151:37;141:8;137:52;134:2;;;202:1;199;192:12;134:2;2553:35:3;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2515:73:3;;;;2610:7;2602:16;;;;;;2645:6;2632:7;2640:1;2632:10;;;;;;;;;;;;;:19;;;;2463:199;;2496:3;;;;;;;2463:199;;;;2678:7;2671:14;;2326:366;;;;:::o;4742:128:9:-;4796:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;4812:8:9;:14;4821:4;4812:14;;;;;;;;;;;;:16;;;;;;;;;;;;;4858:4;4843:20;;;;;;;;;;4742:128;;:::o;838:108:8:-;896:12;927:6;:12;934:4;927:12;;;;;;;;;;;920:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:108;;;:::o;1023:133:12:-;1076:9;1087;1116:7;:13;1124:4;1116:13;;;;;;;;;;;:15;;;1133:7;:13;1141:4;1133:13;;;;;;;;;;;:15;;;1108:41;;;;1023:133;;;:::o;681:132:7:-;743:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;759:47:7;767:4;261:2;788:17;803:1;788:14;:17::i;:::-;759:7;:47::i;:::-;681:132;;;:::o;858:226:10:-;955:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;1003:11:10;971:10;:16;982:4;971:16;;;;;;;;;;;:29;988:11;971:29;;;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;1052:11;1029:48;;;1046:4;1029:48;1065:11;1029:48;;;;;;;;;;;;;;;858:226;;;;:::o;1498:127:7:-;1561:12;1592:10;:16;1603:4;1592:16;;;;;;;;;;;:26;1609:8;1592:26;;;;;;;;;;;1585:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:127;;;;:::o;943:80:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1162:171:12:-;1229:4;148:10;1267:19;;1252:34;;;:11;:34;;;;:74;;;;1290:36;1314:11;1290:23;:36::i;:::-;1252:74;1245:81;;1162:171;;;:::o;2129:191:3:-;2187:4;2203:13;2219:3;;;;;;;;;;;:9;;;2229:4;2219:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2219:15:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2219:15:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2219:15:3;;;;;;;;;2203:31;;2260:10;2251:19;;:5;:19;;;:62;;;;2274:14;:20;2289:4;2274:20;;;;;;;;;;;:27;2295:5;2274:27;;;;;;;;;;;;;;;:39;2302:10;2274:39;;;;;;;;;;;;;;;;;;;;;;;;;2251:62;2244:69;;;2129:191;;;:::o;2435:182:16:-;2510:21;;:::i;:::-;2554:4;2543:3;:8;;:15;;;;2585:6;2568:3;:14;;:23;;;;;2601:9;2606:3;2601:4;:9::i;:::-;2435:182;;;;:::o;2788:121::-;2848:4;2886;:9;;;:16;2871:4;:11;;;:31;;2864:38;;2788:121;;;:::o;3890:166::-;3950:12;3981:68;4001:4;:11;;;4014:34;4025:4;:9;;;4036:4;:11;;;4014:10;:34::i;:::-;3981:4;:9;;;:19;;:68;;;;;:::i;:::-;3974:75;;3890:166;;;:::o;4229:172::-;4290:12;4321:73;4341:4;:16;;;4377:4;:16;;;4359:4;:15;;;:34;4321:4;:9;;;:19;;:73;;;;;:::i;:::-;4314:80;;4229:172;;;:::o;4913:176:15:-;4990:4;5028:5;:12;5013:4;:11;:27;:69;;;;;5044:38;5051:4;5057:1;5060:5;5067:1;5070:4;:11;5044:6;:38::i;:::-;5013:69;5006:76;;4913:176;;;;:::o;5057:965:9:-;5275:15;5293:8;:14;5302:4;5293:14;;;;;;;;;;;;5275:32;;5317:16;5346:4;5336:15;;;;;;5317:34;;5361:19;5383:28;5398:6;5406:4;5383;:14;;:28;;;;;:::i;:::-;5361:50;;5425:12;5421:595;;;5510:1;5457:7;:13;5465:4;5457:13;;;;;;;;;;;:22;5471:7;5457:22;;;;;;;;;;;:32;5480:8;5457:32;;;;;;;;;;;:42;5490:8;5457:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:54;5453:136;;5531:16;:22;5548:4;5531:22;;;;;;;;;;;:31;5554:7;5531:31;;;;;;;;;;;:41;5563:8;5531:41;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5453:136;5609:7;:13;5617:4;5609:13;;;;;;;;;;;:22;5623:7;5609:22;;;;;;;;;;;:32;5632:8;5609:32;;;;;;;;;;;:42;5642:8;5609:42;;;;;;;;;;;;;;;;5602:50;;;;:::i;:::-;5688:4;5671:38;5694:4;5700:8;5671:38;;;;;;;;;;;;;;;;5421:595;;;5797:1;5744:7;:13;5752:4;5744:13;;;;;;;;;;;:22;5758:7;5744:22;;;;;;;;;;;:32;5767:8;5744:32;;;;;;;;;;;:42;5777:8;5744:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:54;5740:136;;;5818:16;:22;5835:4;5818:22;;;;;;;;;;;:31;5841:7;5818:31;;;;;;;;;;;:41;5850:8;5818:41;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5740:136;5934:6;5889:7;:13;5897:4;5889:13;;;;;;;;;;;:22;5903:7;5889:22;;;;;;;;;;;:32;5912:8;5889:32;;;;;;;;;;;:42;5922:8;5889:42;;;;;;;;;;;;;;;:51;;;;;;;;;;;;:::i;:::-;;5976:4;5959:46;5982:4;5988:8;5998:6;5959:46;;;;;;;;;;;;;;;;;5421:595;5057:965;;;;;;;;;;:::o;3032:682:16:-;3108:4;:15;;;3094:4;:11;;:29;;;;;3152:4;:9;;;:16;3137:4;:11;;;:31;3133:68;;3184:7;;3133:68;3236:8;3261:34;3272:4;:9;;;3283:4;:11;;;3261:10;:34::i;:::-;3247:4;:11;;;:48;3236:59;;3358:25;3379:3;3358:4;:9;;;:20;;:25;;;;:::i;:::-;3343:4;:12;;:40;;;;;;;;;;;3400:1;3393:8;;;;3424:25;3445:3;3424:4;:9;;;:20;;:25;;;;:::i;:::-;3411:4;:10;;:38;;;;;;;;;;;3466:1;3459:8;;;;3488:25;3509:3;3488:4;:9;;;:20;;:25;;;;:::i;:::-;3477:4;:8;;:36;;;;;;;;;;;3530:1;3523:8;;;;3568:16;3587:25;3608:3;3587:4;:9;;;:20;;:25;;;;:::i;:::-;3568:44;;;;3629:1;3622:8;;;;3659:3;3640:4;:16;;:22;;;;;3696:11;3690:3;:17;3672:4;:15;;:35;;;;;3032:682;;;;:::o;414:204:5:-;476:17;525:2;513:1;:8;:14;505:23;;;;;;598:2;593:3;589:12;583:2;580:1;576:10;570:17;566:36;561:41;;547:65;;;:::o;624:189::-;681:14;721:2;711:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;711:13:5;;;;707:17;;792:2;787:3;783:12;780:1;776:20;771:2;768:1;764:10;757:40;743:64;;;:::o;951:169:11:-;1018:4;144:10;1056:17;;1041:32;;;:11;:32;;;;:72;;;;1077:36;1101:11;1077:23;:36::i;:::-;1041:72;1034:79;;951:169;;;:::o;535:367:16:-;609:4;625:8;636:6;625:17;;652:215;659:4;652:215;;;692:4;:11;686:3;:17;679:25;;;;718:13;734:19;749:3;734:4;:14;;:19;;;;:::i;:::-;718:35;;;;785:1;774:8;:12;767:19;;;;816:1;804:8;:13;800:57;;;837:5;;;800:57;652:215;;;;889:6;883:3;:12;876:19;;;535:367;;;;:::o;8683:393:15:-;8766:12;8814:4;:11;8807:3;8798:6;:12;:27;;8790:36;;;;;;8837:16;8866:3;8856:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;8856:14:15;;;;8837:33;;8880:9;8899:8;8958:2;8953:3;8949:12;8941:20;;9000:6;8995:2;8989:4;8985:13;8981:26;8974:33;;9026:22;9033:4;9039:3;9044;9026:6;:22::i;:::-;9066:3;9059:10;;;;;8683:393;;;;;:::o;3277:209::-;3396:4;3448:31;3455:5;3462:11;3475:3;3448:6;:31::i;:::-;3419:25;3426:4;3432:6;3440:3;3419:6;:25::i;:::-;:60;3412:67;;3277:209;;;;;;;:::o;5697:223::-;5769:10;5810:4;:11;5805:1;5799:3;:7;:22;;5791:31;;;;;;5897:6;5890:3;5886:1;5880:4;5876:12;5872:22;5866:29;5862:42;5855:49;;5841:73;;;;:::o;6164:227::-;6236:10;6277:4;:11;6272:1;6266:3;:7;:22;;6258:31;;;;;;6364:10;6357:3;6353:1;6347:4;6343:12;6339:22;6333:29;6329:46;6322:53;;6308:77;;;;:::o;2680:174:10:-;2747:4;204:49;;;;;;;;;;;;;;2770:37;;;:11;:37;;;;:77;;;;2811:36;2835:11;2811:23;:36::i;:::-;2770:77;2763:84;;2680:174;;;:::o;5331:122:15:-;5402:9;5436:4;5441:3;5436:9;;;;;;;;;;;;;;;;5430:16;;5423:23;;5331:122;;;;:::o;7914:549::-;8034:165;8048:2;8041:3;:9;8034:165;;8123:3;8117:10;8111:4;8104:24;8163:2;8155:10;;;;8186:2;8179:9;;;;8059:2;8052:9;;;;8034:165;;;8241:9;8273:1;8266:3;8261:2;:8;8253:3;:17;:21;8241:33;;8342:4;8338:9;8332:3;8326:10;8322:26;8394:4;8387;8381:11;8377:22;8438:7;8428:8;8425:21;8419:4;8412:35;8293:164;;;;;;:::o;306:238::-;387:11;434:4;:11;427:3;418:6;:12;:27;;410:36;;;;;;524:3;515:6;510:2;504:4;500:13;496:26;486:42;479:49;;465:73;;;;;:::o;4876:175:9:-;4943:4;265:10;4981:23;;4966:38;;;:11;:38;;;;:78;;;;5008:36;5032:11;5008:23;:36::i;:::-;4966:78;4959:85;;4876:175;;;:::o;952:177:8:-;1019:4;159:10;1057:25;;1042:40;;;:11;:40;;;;:80;;;;1086:36;1110:11;1086:23;:36::i;:::-;1042:80;1035:87;;952:177;;;:::o;1631:208:7:-;1698:4;144:10;1736:17;;1721:32;;;:11;:32;;;;:71;;;;207:10;1772:20;;1757:35;;;:11;:35;;;;1721:71;:111;;;;1796:36;1820:11;1796:23;:36::i;:::-;1721:111;1714:118;;1631:208;;;:::o;1655:168:6:-;1722:4;142:10;1760:16;;1745:31;;;:11;:31;;;;:71;;;;1780:36;1804:11;1780:23;:36::i;:::-;1745:71;1738:78;;1655:168;;;:::o;114:129:5:-;181:4;97:10;219:17;;204:32;;;:11;:32;;;;197:39;;114:129;;;:::o;520:2174:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;299:359;;;436:3;429:4;421:6;417:17;413:27;403:2;;454:1;451;444:12;403:2;487:6;474:20;464:30;;514:18;506:6;503:30;500:2;;;546:1;543;536:12;500:2;580:4;572:6;568:17;556:29;;631:3;623:4;615:6;611:17;601:8;597:32;594:41;591:2;;;648:1;645;638:12;591:2;396:262;;;;;;666:124;;743:6;730:20;721:29;;755:30;779:5;755:30;;;715:75;;;;;797:130;;877:6;864:20;855:29;;889:33;916:5;889:33;;;849:78;;;;;934:128;;1013:6;1000:20;991:29;;1025:32;1051:5;1025:32;;;985:77;;;;;1083:335;;;1197:3;1190:4;1182:6;1178:17;1174:27;1164:2;;1215:1;1212;1205:12;1164:2;1248:6;1235:20;1225:30;;1275:18;1267:6;1264:30;1261:2;;;1307:1;1304;1297:12;1261:2;1341:4;1333:6;1329:17;1317:29;;1391:3;1384;1376:6;1372:16;1362:8;1358:31;1355:40;1352:2;;;1408:1;1405;1398:12;1352:2;1157:261;;;;;;1427:440;;1528:3;1521:4;1513:6;1509:17;1505:27;1495:2;;1546:1;1543;1536:12;1495:2;1583:6;1570:20;1605:64;1620:48;1661:6;1620:48;;;1605:64;;;1596:73;;1689:6;1682:5;1675:21;1725:4;1717:6;1713:17;1758:4;1751:5;1747:16;1793:3;1784:6;1779:3;1775:16;1772:25;1769:2;;;1810:1;1807;1800:12;1769:2;1820:41;1854:6;1849:3;1844;1820:41;;;1488:379;;;;;;;;1890:336;;;2005:3;1998:4;1990:6;1986:17;1982:27;1972:2;;2023:1;2020;2013:12;1972:2;2056:6;2043:20;2033:30;;2083:18;2075:6;2072:30;2069:2;;;2115:1;2112;2105:12;2069:2;2149:4;2141:6;2137:17;2125:29;;2199:3;2192;2184:6;2180:16;2170:8;2166:31;2163:40;2160:2;;;2216:1;2213;2206:12;2160:2;1965:261;;;;;;2234:128;;2313:6;2300:20;2291:29;;2325:32;2351:5;2325:32;;;2285:77;;;;;2369:130;;2449:6;2436:20;2427:29;;2461:33;2488:5;2461:33;;;2421:78;;;;;2506:263;;2621:2;2609:9;2600:7;2596:23;2592:32;2589:2;;;2637:1;2634;2627:12;2589:2;2672:1;2689:64;2745:7;2736:6;2725:9;2721:22;2689:64;;;2679:74;;2651:108;2583:186;;;;;2776:411;;;2922:2;2910:9;2901:7;2897:23;2893:32;2890:2;;;2938:1;2935;2928:12;2890:2;3001:1;2990:9;2986:17;2973:31;3024:18;3016:6;3013:30;3010:2;;;3056:1;3053;3046:12;3010:2;3084:87;3163:7;3154:6;3143:9;3139:22;3084:87;;;3074:97;;;;2952:225;2884:303;;;;;;3194:241;;3298:2;3286:9;3277:7;3273:23;3269:32;3266:2;;;3314:1;3311;3304:12;3266:2;3349:1;3366:53;3411:7;3402:6;3391:9;3387:22;3366:53;;;3356:63;;3328:97;3260:175;;;;;3442:366;;;3563:2;3551:9;3542:7;3538:23;3534:32;3531:2;;;3579:1;3576;3569:12;3531:2;3614:1;3631:53;3676:7;3667:6;3656:9;3652:22;3631:53;;;3621:63;;3593:97;3721:2;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;;;3729:63;;3700:98;3525:283;;;;;;3815:491;;;;3953:2;3941:9;3932:7;3928:23;3924:32;3921:2;;;3969:1;3966;3959:12;3921:2;4004:1;4021:53;4066:7;4057:6;4046:9;4042:22;4021:53;;;4011:63;;3983:97;4111:2;4129:53;4174:7;4165:6;4154:9;4150:22;4129:53;;;4119:63;;4090:98;4219:2;4237:53;4282:7;4273:6;4262:9;4258:22;4237:53;;;4227:63;;4198:98;3915:391;;;;;;4313:485;;;;4448:2;4436:9;4427:7;4423:23;4419:32;4416:2;;;4464:1;4461;4454:12;4416:2;4499:1;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;;;4506:63;;4478:97;4606:2;4624:53;4669:7;4660:6;4649:9;4645:22;4624:53;;;4614:63;;4585:98;4714:2;4732:50;4774:7;4765:6;4754:9;4750:22;4732:50;;;4722:60;;4693:95;4410:388;;;;;;4805:366;;;4926:2;4914:9;4905:7;4901:23;4897:32;4894:2;;;4942:1;4939;4932:12;4894:2;4977:1;4994:53;5039:7;5030:6;5019:9;5015:22;4994:53;;;4984:63;;4956:97;5084:2;5102:53;5147:7;5138:6;5127:9;5123:22;5102:53;;;5092:63;;5063:98;4888:283;;;;;;5178:491;;;;5316:2;5304:9;5295:7;5291:23;5287:32;5284:2;;;5332:1;5329;5322:12;5284:2;5367:1;5384:53;5429:7;5420:6;5409:9;5405:22;5384:53;;;5374:63;;5346:97;5474:2;5492:53;5537:7;5528:6;5517:9;5513:22;5492:53;;;5482:63;;5453:98;5582:2;5600:53;5645:7;5636:6;5625:9;5621:22;5600:53;;;5590:63;;5561:98;5278:391;;;;;;5676:489;;;;5813:2;5801:9;5792:7;5788:23;5784:32;5781:2;;;5829:1;5826;5819:12;5781:2;5864:1;5881:53;5926:7;5917:6;5906:9;5902:22;5881:53;;;5871:63;;5843:97;5971:2;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;;;5979:63;;5950:98;6079:2;6097:52;6141:7;6132:6;6121:9;6117:22;6097:52;;;6087:62;;6058:97;5775:390;;;;;;6172:364;;;6292:2;6280:9;6271:7;6267:23;6263:32;6260:2;;;6308:1;6305;6298:12;6260:2;6343:1;6360:53;6405:7;6396:6;6385:9;6381:22;6360:53;;;6350:63;;6322:97;6450:2;6468:52;6512:7;6503:6;6492:9;6488:22;6468:52;;;6458:62;;6429:97;6254:282;;;;;;6543:489;;;;6680:2;6668:9;6659:7;6655:23;6651:32;6648:2;;;6696:1;6693;6686:12;6648:2;6731:1;6748:53;6793:7;6784:6;6773:9;6769:22;6748:53;;;6738:63;;6710:97;6838:2;6856:52;6900:7;6891:6;6880:9;6876:22;6856:52;;;6846:62;;6817:97;6945:2;6963:53;7008:7;6999:6;6988:9;6984:22;6963:53;;;6953:63;;6924:98;6642:390;;;;;;7039:490;;;;7179:2;7167:9;7158:7;7154:23;7150:32;7147:2;;;7195:1;7192;7185:12;7147:2;7230:1;7247:53;7292:7;7283:6;7272:9;7268:22;7247:53;;;7237:63;;7209:97;7365:2;7354:9;7350:18;7337:32;7389:18;7381:6;7378:30;7375:2;;;7421:1;7418;7411:12;7375:2;7449:64;7505:7;7496:6;7485:9;7481:22;7449:64;;;7439:74;;;;7316:203;7141:388;;;;;;7536:492;;;;7677:2;7665:9;7656:7;7652:23;7648:32;7645:2;;;7693:1;7690;7683:12;7645:2;7728:1;7745:53;7790:7;7781:6;7770:9;7766:22;7745:53;;;7735:63;;7707:97;7863:2;7852:9;7848:18;7835:32;7887:18;7879:6;7876:30;7873:2;;;7919:1;7916;7909:12;7873:2;7947:65;8004:7;7995:6;7984:9;7980:22;7947:65;;;7937:75;;;;7814:204;7639:389;;;;;;8035:743;;;;;;8213:2;8201:9;8192:7;8188:23;8184:32;8181:2;;;8229:1;8226;8219:12;8181:2;8264:1;8281:53;8326:7;8317:6;8306:9;8302:22;8281:53;;;8271:63;;8243:97;8399:2;8388:9;8384:18;8371:32;8423:18;8415:6;8412:30;8409:2;;;8455:1;8452;8445:12;8409:2;8483:65;8540:7;8531:6;8520:9;8516:22;8483:65;;;8473:75;;;;8350:204;8613:2;8602:9;8598:18;8585:32;8637:18;8629:6;8626:30;8623:2;;;8669:1;8666;8659:12;8623:2;8697:65;8754:7;8745:6;8734:9;8730:22;8697:65;;;8687:75;;;;8564:204;8175:603;;;;;;;;;8785:366;;;8906:2;8894:9;8885:7;8881:23;8877:32;8874:2;;;8922:1;8919;8912:12;8874:2;8957:1;8974:53;9019:7;9010:6;8999:9;8995:22;8974:53;;;8964:63;;8936:97;9064:2;9082:53;9127:7;9118:6;9107:9;9103:22;9082:53;;;9072:63;;9043:98;8868:283;;;;;;9158:615;;;;;9315:2;9303:9;9294:7;9290:23;9286:32;9283:2;;;9331:1;9328;9321:12;9283:2;9366:1;9383:53;9428:7;9419:6;9408:9;9404:22;9383:53;;;9373:63;;9345:97;9473:2;9491:53;9536:7;9527:6;9516:9;9512:22;9491:53;;;9481:63;;9452:98;9609:2;9598:9;9594:18;9581:32;9633:18;9625:6;9622:30;9619:2;;;9665:1;9662;9655:12;9619:2;9693:64;9749:7;9740:6;9729:9;9725:22;9693:64;;;9683:74;;;;9560:203;9277:496;;;;;;;;9780:595;;;;9927:2;9915:9;9906:7;9902:23;9898:32;9895:2;;;9943:1;9940;9933:12;9895:2;9978:1;9995:53;10040:7;10031:6;10020:9;10016:22;9995:53;;;9985:63;;9957:97;10085:2;10103:53;10148:7;10139:6;10128:9;10124:22;10103:53;;;10093:63;;10064:98;10221:2;10210:9;10206:18;10193:32;10245:18;10237:6;10234:30;10231:2;;;10277:1;10274;10267:12;10231:2;10297:62;10351:7;10342:6;10331:9;10327:22;10297:62;;;10287:72;;10172:193;9889:486;;;;;;10382:239;;10485:2;10473:9;10464:7;10460:23;10456:32;10453:2;;;10501:1;10498;10491:12;10453:2;10536:1;10553:52;10597:7;10588:6;10577:9;10573:22;10553:52;;;10543:62;;10515:96;10447:174;;;;;10629:177;;10740:60;10796:3;10788:6;10740:60;;;10726:74;;10719:87;;;;;10814:142;10905:45;10944:5;10905:45;;;10900:3;10893:58;10887:69;;;10963:137;11062:32;11088:5;11062:32;;;11057:3;11050:45;11044:56;;;11107:113;11190:24;11208:5;11190:24;;;11185:3;11178:37;11172:48;;;11254:888;;11409:59;11462:5;11409:59;;;11481:91;11565:6;11560:3;11481:91;;;11474:98;;11595:3;11637:4;11629:6;11625:17;11620:3;11616:27;11664:61;11719:5;11664:61;;;11745:7;11773:1;11758:345;11783:6;11780:1;11777:13;11758:345;;;11845:9;11839:4;11835:20;11830:3;11823:33;11890:6;11884:13;11912:74;11981:4;11966:13;11912:74;;;11904:82;;12003:65;12061:6;12003:65;;;11993:75;;12091:4;12086:3;12082:14;12075:21;;11815:288;11805:1;11802;11798:9;11793:14;;11758:345;;;11762:14;12116:4;12109:11;;12133:3;12126:10;;11388:754;;;;;;;;;;12150:104;12227:21;12242:5;12227:21;;;12222:3;12215:34;12209:45;;;12261:113;12344:24;12362:5;12344:24;;;12339:3;12332:37;12326:48;;;12381:110;12462:23;12479:5;12462:23;;;12457:3;12450:36;12444:47;;;12521:297;;12635:70;12698:6;12693:3;12635:70;;;12628:77;;12717:43;12753:6;12748:3;12741:5;12717:43;;;12782:29;12804:6;12782:29;;;12777:3;12773:39;12766:46;;12621:197;;;;;;12849:306;;12977:88;13058:6;13053:3;12977:88;;;12970:95;;13077:43;13113:6;13108:3;13101:5;13077:43;;;13142:6;13137:3;13133:16;13126:23;;12963:192;;;;;;13163:343;;13273:38;13305:5;13273:38;;;13323:70;13386:6;13381:3;13323:70;;;13316:77;;13398:52;13443:6;13438:3;13431:4;13424:5;13420:16;13398:52;;;13471:29;13493:6;13471:29;;;13466:3;13462:39;13455:46;;13253:253;;;;;;13513:356;;13641:38;13673:5;13641:38;;;13691:88;13772:6;13767:3;13691:88;;;13684:95;;13784:52;13829:6;13824:3;13817:4;13810:5;13806:16;13784:52;;;13857:6;13852:3;13848:16;13841:23;;13621:248;;;;;;13876:315;;13972:34;14000:5;13972:34;;;14018:60;14071:6;14066:3;14018:60;;;14011:67;;14083:52;14128:6;14123:3;14116:4;14109:5;14105:16;14083:52;;;14156:29;14178:6;14156:29;;;14151:3;14147:39;14140:46;;13952:239;;;;;;14223:300;;14339:71;14403:6;14398:3;14339:71;;;14332:78;;14422:43;14458:6;14453:3;14446:5;14422:43;;;14487:29;14509:6;14487:29;;;14482:3;14478:39;14471:46;;14325:198;;;;;;14556:313;;14690:89;14772:6;14767:3;14690:89;;;14683:96;;14791:43;14827:6;14822:3;14815:5;14791:43;;;14856:6;14851:3;14847:16;14840:23;;14676:193;;;;;;14877:347;;14989:39;15022:5;14989:39;;;15040:71;15104:6;15099:3;15040:71;;;15033:78;;15116:52;15161:6;15156:3;15149:4;15142:5;15138:16;15116:52;;;15189:29;15211:6;15189:29;;;15184:3;15180:39;15173:46;;14969:255;;;;;;15232:501;;15410:85;15492:2;15487:3;15410:85;;;15403:92;;15528:66;15524:1;15519:3;15515:11;15508:87;15629:66;15624:2;15619:3;15615:12;15608:88;15724:2;15719:3;15715:12;15708:19;;15396:337;;;;15741:110;15822:23;15839:5;15822:23;;;15817:3;15810:36;15804:47;;;15858:113;15941:24;15959:5;15941:24;;;15936:3;15929:37;15923:48;;;15978:274;;16128:99;16223:3;16214:6;16206;16128:99;;;16121:106;;16244:3;16237:10;;16109:143;;;;;;16259:262;;16403:93;16492:3;16483:6;16403:93;;;16396:100;;16513:3;16506:10;;16384:137;;;;;16528:286;;16684:105;16785:3;16776:6;16768;16684:105;;;16677:112;;16806:3;16799:10;;16665:149;;;;;;16821:372;;17020:148;17164:3;17020:148;;;17013:155;;17185:3;17178:10;;17001:192;;;;17200:213;;17318:2;17307:9;17303:18;17295:26;;17332:71;17400:1;17389:9;17385:17;17376:6;17332:71;;;17289:124;;;;;17420:229;;17546:2;17535:9;17531:18;17523:26;;17560:79;17636:1;17625:9;17621:17;17612:6;17560:79;;;17517:132;;;;;17656:245;;17790:2;17779:9;17775:18;17767:26;;17804:87;17888:1;17877:9;17873:17;17864:6;17804:87;;;17761:140;;;;;17908:381;;18086:2;18075:9;18071:18;18063:26;;18136:9;18130:4;18126:20;18122:1;18111:9;18107:17;18100:47;18161:118;18274:4;18265:6;18161:118;;;18153:126;;18057:232;;;;;18296:201;;18408:2;18397:9;18393:18;18385:26;;18422:65;18484:1;18473:9;18469:17;18460:6;18422:65;;;18379:118;;;;;18504:213;;18622:2;18611:9;18607:18;18599:26;;18636:71;18704:1;18693:9;18689:17;18680:6;18636:71;;;18593:124;;;;;18724:324;;18870:2;18859:9;18855:18;18847:26;;18884:71;18952:1;18941:9;18937:17;18928:6;18884:71;;;18966:72;19034:2;19023:9;19019:18;19010:6;18966:72;;;18841:207;;;;;;19055:209;;19171:2;19160:9;19156:18;19148:26;;19185:69;19251:1;19240:9;19236:17;19227:6;19185:69;;;19142:122;;;;;19271:317;;19417:2;19406:9;19402:18;19394:26;;19467:9;19461:4;19457:20;19453:1;19442:9;19438:17;19431:47;19492:86;19573:4;19564:6;19556;19492:86;;;19484:94;;19388:200;;;;;;19595:297;;19731:2;19720:9;19716:18;19708:26;;19781:9;19775:4;19771:20;19767:1;19756:9;19752:17;19745:47;19806:76;19877:4;19868:6;19806:76;;;19798:84;;19702:190;;;;;19899:404;;20061:2;20050:9;20046:18;20038:26;;20111:9;20105:4;20101:20;20097:1;20086:9;20082:17;20075:47;20136:76;20207:4;20198:6;20136:76;;;20128:84;;20223:70;20289:2;20278:9;20274:18;20265:6;20223:70;;;20032:271;;;;;;20310:599;;20518:2;20507:9;20503:18;20495:26;;20568:9;20562:4;20558:20;20554:1;20543:9;20539:17;20532:47;20593:76;20664:4;20655:6;20593:76;;;20585:84;;20680:70;20746:2;20735:9;20731:18;20722:6;20680:70;;;20798:9;20792:4;20788:20;20783:2;20772:9;20768:18;20761:48;20823:76;20894:4;20885:6;20823:76;;;20815:84;;20489:420;;;;;;;20916:321;;21064:2;21053:9;21049:18;21041:26;;21114:9;21108:4;21104:20;21100:1;21089:9;21085:17;21078:47;21139:88;21222:4;21213:6;21205;21139:88;;;21131:96;;21035:202;;;;;;21244:301;;21382:2;21371:9;21367:18;21359:26;;21432:9;21426:4;21422:20;21418:1;21407:9;21403:17;21396:47;21457:78;21530:4;21521:6;21457:78;;;21449:86;;21353:192;;;;;21552:408;;21716:2;21705:9;21701:18;21693:26;;21730:71;21798:1;21787:9;21783:17;21774:6;21730:71;;;21849:9;21843:4;21839:20;21834:2;21823:9;21819:18;21812:48;21874:76;21945:4;21936:6;21874:76;;;21866:84;;21687:273;;;;;;21967:256;;22029:2;22023:9;22013:19;;22067:4;22059:6;22055:17;22166:6;22154:10;22151:22;22130:18;22118:10;22115:34;22112:62;22109:2;;;22187:1;22184;22177:12;22109:2;22207:10;22203:2;22196:22;22007:216;;;;;22230:258;;22373:18;22365:6;22362:30;22359:2;;;22405:1;22402;22395:12;22359:2;22449:4;22445:9;22438:4;22430:6;22426:17;22422:33;22414:41;;22478:4;22472;22468:15;22460:23;;22296:192;;;;22498:128;;22613:4;22605:6;22601:17;22590:28;;22581:45;;;;22636:112;;22737:5;22731:12;22721:22;;22715:33;;;;22755:87;;22831:5;22825:12;22815:22;;22809:33;;;;22849:91;;22929:5;22923:12;22913:22;;22907:33;;;;22947:92;;23028:5;23022:12;23012:22;;23006:33;;;;23048:129;;23165:4;23157:6;23153:17;23142:28;;23134:43;;;;23187:183;;23322:6;23317:3;23310:19;23359:4;23354:3;23350:14;23335:29;;23303:67;;;;;23379:152;;23483:6;23478:3;23471:19;23520:4;23515:3;23511:14;23496:29;;23464:67;;;;;23540:162;;23654:6;23649:3;23642:19;23691:4;23686:3;23682:14;23667:29;;23635:67;;;;;23711:144;;23846:3;23831:18;;23824:31;;;;;23864:163;;23979:6;23974:3;23967:19;24016:4;24011:3;24007:14;23992:29;;23960:67;;;;;24036:145;;24172:3;24157:18;;24150:31;;;;;24189:91;;24251:24;24269:5;24251:24;;;24240:35;;24234:46;;;;24287:99;;24357:24;24375:5;24357:24;;;24346:35;;24340:46;;;;24393:85;;24466:5;24459:13;24452:21;24441:32;;24435:43;;;;24485:72;;24547:5;24536:16;;24530:27;;;;24564:144;;24636:66;24629:5;24625:78;24614:89;;24608:100;;;;24715:84;;24787:6;24780:5;24776:18;24765:29;;24759:40;;;;24806:121;;24879:42;24872:5;24868:54;24857:65;;24851:76;;;;24934:72;;24996:5;24985:16;;24979:27;;;;25013:129;;25100:37;25131:5;25100:37;;;25087:50;;25081:61;;;;25149:121;;25228:37;25259:5;25228:37;;;25215:50;;25209:61;;;;25277:108;;25356:24;25374:5;25356:24;;;25343:37;;25337:48;;;;25393:145;25474:6;25469:3;25464;25451:30;25530:1;25521:6;25516:3;25512:16;25505:27;25444:94;;;;25547:268;25612:1;25619:101;25633:6;25630:1;25627:13;25619:101;;;25709:1;25704:3;25700:11;25694:18;25690:1;25685:3;25681:11;25674:39;25655:2;25652:1;25648:10;25643:15;;25619:101;;;25735:6;25732:1;25729:13;25726:2;;;25800:1;25791:6;25786:3;25782:16;25775:27;25726:2;25596:219;;;;;25823:97;;25911:2;25907:7;25902:2;25895:5;25891:14;25887:28;25877:38;;25871:49;;;;25928:117;25997:24;26015:5;25997:24;;;25990:5;25987:35;25977:2;;26036:1;26033;26026:12;25977:2;25971:74;;26052:111;26118:21;26133:5;26118:21;;;26111:5;26108:32;26098:2;;26154:1;26151;26144:12;26098:2;26092:71;;26170:117;26239:24;26257:5;26239:24;;;26232:5;26229:35;26219:2;;26278:1;26275;26268:12;26219:2;26213:74;;26294:115;26362:23;26379:5;26362:23;;;26355:5;26352:34;26342:2;;26400:1;26397;26390:12;26342:2;26336:73;;26416:115;26484:23;26501:5;26484:23;;;26477:5;26474:34;26464:2;;26522:1;26519;26512:12;26464:2;26458:73;;26538:117;26607:24;26625:5;26607:24;;;26600:5;26597:35;26587:2;;26646:1;26643;26636:12;26587:2;26581:74;",
  "source": "pragma solidity ^0.5.0;\npragma experimental ABIEncoderV2;\n\nimport \"@ensdomains/ens/contracts/ENS.sol\";\nimport \"./profiles/ABIResolver.sol\";\nimport \"./profiles/AddrResolver.sol\";\nimport \"./profiles/ContentHashResolver.sol\";\nimport \"./profiles/DNSResolver.sol\";\nimport \"./profiles/InterfaceResolver.sol\";\nimport \"./profiles/NameResolver.sol\";\nimport \"./profiles/PubkeyResolver.sol\";\nimport \"./profiles/TextResolver.sol\";\n\n/**\n * A simple resolver anyone can use; only allows the owner of a node to set its\n * address.\n */\ncontract PublicResolver is ABIResolver, AddrResolver, ContentHashResolver, DNSResolver, InterfaceResolver, NameResolver, PubkeyResolver, TextResolver {\n    ENS ens;\n\n    /**\n     * A mapping of authorisations. An address that is authorised for a name\n     * may make any changes to the name that the owner could, but may not update\n     * the set of authorisations.\n     * (node, owner, caller) => isAuthorised\n     */\n    mapping(bytes32=>mapping(address=>mapping(address=>bool))) public authorisations;\n\n    event AuthorisationChanged(bytes32 indexed node, address indexed owner, address indexed target, bool isAuthorised);\n\n    constructor(ENS _ens) public {\n        ens = _ens;\n    }\n\n    /**\n     * @dev Sets or clears an authorisation.\n     * Authorisations are specific to the caller. Any account can set an authorisation\n     * for any name, but the authorisation that is checked will be that of the\n     * current owner of a name. Thus, transferring a name effectively clears any\n     * existing authorisations, and new authorisations can be set in advance of\n     * an ownership transfer if desired.\n     *\n     * @param node The name to change the authorisation on.\n     * @param target The address that is to be authorised or deauthorised.\n     * @param isAuthorised True if the address should be authorised, or false if it should be deauthorised.\n     */\n    function setAuthorisation(bytes32 node, address target, bool isAuthorised) external {\n        authorisations[node][msg.sender][target] = isAuthorised;\n        emit AuthorisationChanged(node, msg.sender, target, isAuthorised);\n    }\n\n    function isAuthorised(bytes32 node) internal view returns(bool) {\n        address owner = ens.owner(node);\n        return owner == msg.sender || authorisations[node][owner][msg.sender];\n    }\n\n    function multicall(bytes[] calldata data) external returns(bytes[] memory results) {\n        results = new bytes[](data.length);\n        for(uint i = 0; i < data.length; i++) {\n            (bool success, bytes memory result) = address(this).delegatecall(data[i]);\n            require(success);\n            results[i] = result;\n        }\n        return results;\n    }\n}\n",
  "sourcePath": "/home/user/Dropbox/projects/resolvers/contracts/PublicResolver.sol",
  "ast": {
    "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/PublicResolver.sol",
    "exportedSymbols": {
      "PublicResolver": [
        353
      ]
    },
    "id": 354,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 181,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:3"
      },
      {
        "id": 182,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:3"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "@ensdomains/ens/contracts/ENS.sol",
        "id": 183,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 3783,
        "src": "59:43:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/ABIResolver.sol",
        "file": "./profiles/ABIResolver.sol",
        "id": 184,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 799,
        "src": "103:36:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/AddrResolver.sol",
        "file": "./profiles/AddrResolver.sol",
        "id": 185,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 958,
        "src": "140:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/ContentHashResolver.sol",
        "file": "./profiles/ContentHashResolver.sol",
        "id": 186,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1028,
        "src": "178:44:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/DNSResolver.sol",
        "file": "./profiles/DNSResolver.sol",
        "id": 187,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1459,
        "src": "223:36:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/InterfaceResolver.sol",
        "file": "./profiles/InterfaceResolver.sol",
        "id": 188,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1646,
        "src": "260:42:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/NameResolver.sol",
        "file": "./profiles/NameResolver.sol",
        "id": 189,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1716,
        "src": "303:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/PubkeyResolver.sol",
        "file": "./profiles/PubkeyResolver.sol",
        "id": 190,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1807,
        "src": "341:39:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/TextResolver.sol",
        "file": "./profiles/TextResolver.sol",
        "id": 191,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1890,
        "src": "381:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 192,
              "name": "ABIResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 798,
              "src": "547:11:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ABIResolver_$798",
                "typeString": "contract ABIResolver"
              }
            },
            "id": 193,
            "nodeType": "InheritanceSpecifier",
            "src": "547:11:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 194,
              "name": "AddrResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 957,
              "src": "560:12:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AddrResolver_$957",
                "typeString": "contract AddrResolver"
              }
            },
            "id": 195,
            "nodeType": "InheritanceSpecifier",
            "src": "560:12:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 196,
              "name": "ContentHashResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1027,
              "src": "574:19:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContentHashResolver_$1027",
                "typeString": "contract ContentHashResolver"
              }
            },
            "id": 197,
            "nodeType": "InheritanceSpecifier",
            "src": "574:19:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 198,
              "name": "DNSResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1458,
              "src": "595:11:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSResolver_$1458",
                "typeString": "contract DNSResolver"
              }
            },
            "id": 199,
            "nodeType": "InheritanceSpecifier",
            "src": "595:11:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 200,
              "name": "InterfaceResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1645,
              "src": "608:17:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_InterfaceResolver_$1645",
                "typeString": "contract InterfaceResolver"
              }
            },
            "id": 201,
            "nodeType": "InheritanceSpecifier",
            "src": "608:17:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 202,
              "name": "NameResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1715,
              "src": "627:12:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NameResolver_$1715",
                "typeString": "contract NameResolver"
              }
            },
            "id": 203,
            "nodeType": "InheritanceSpecifier",
            "src": "627:12:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 204,
              "name": "PubkeyResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1806,
              "src": "641:14:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PubkeyResolver_$1806",
                "typeString": "contract PubkeyResolver"
              }
            },
            "id": 205,
            "nodeType": "InheritanceSpecifier",
            "src": "641:14:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 206,
              "name": "TextResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1889,
              "src": "657:12:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TextResolver_$1889",
                "typeString": "contract TextResolver"
              }
            },
            "id": 207,
            "nodeType": "InheritanceSpecifier",
            "src": "657:12:3"
          }
        ],
        "contractDependencies": [
          662,
          798,
          957,
          1027,
          1458,
          1645,
          1715,
          1806,
          1889
        ],
        "contractKind": "contract",
        "documentation": "A simple resolver anyone can use; only allows the owner of a node to set its\naddress.",
        "fullyImplemented": true,
        "id": 353,
        "linearizedBaseContracts": [
          353,
          1889,
          1806,
          1715,
          1645,
          1458,
          1027,
          957,
          798,
          662
        ],
        "name": "PublicResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 209,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 353,
            "src": "676:7:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$3782",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 208,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3782,
              "src": "676:3:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3782",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 217,
            "name": "authorisations",
            "nodeType": "VariableDeclaration",
            "scope": 353,
            "src": "943:80:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
              "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
            },
            "typeName": {
              "id": 216,
              "keyType": {
                "id": 210,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "951:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "943:58:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
                "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
              },
              "valueType": {
                "id": 215,
                "keyType": {
                  "id": 211,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "968:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "960:40:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                  "typeString": "mapping(address => mapping(address => bool))"
                },
                "valueType": {
                  "id": 214,
                  "keyType": {
                    "id": 212,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "985:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "977:22:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 213,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "994:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 227,
            "name": "AuthorisationChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 219,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1057:20:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 218,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1057:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 221,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1079:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1079:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 223,
                  "indexed": true,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1102:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1102:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 225,
                  "indexed": false,
                  "name": "isAuthorised",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1126:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 224,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1126:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1056:88:3"
            },
            "src": "1030:115:3"
          },
          {
            "body": {
              "id": 236,
              "nodeType": "Block",
              "src": "1180:27:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 232,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 209,
                      "src": "1190:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 233,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 229,
                      "src": "1196:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "1190:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 235,
                  "nodeType": "ExpressionStatement",
                  "src": "1190:10:3"
                }
              ]
            },
            "documentation": null,
            "id": 237,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 229,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 237,
                  "src": "1163:8:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$3782",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 228,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3782,
                    "src": "1163:3:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1162:10:3"
            },
            "returnParameters": {
              "id": 231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1180:0:3"
            },
            "scope": 353,
            "src": "1151:56:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 265,
              "nodeType": "Block",
              "src": "1976:147:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 246,
                            "name": "authorisations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 217,
                            "src": "1986:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
                              "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
                            }
                          },
                          "id": 251,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 247,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 239,
                            "src": "2001:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1986:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 252,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 248,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4133,
                            "src": "2007:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2007:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1986:32:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 253,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 250,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "2019:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1986:40:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 254,
                      "name": "isAuthorised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 243,
                      "src": "2029:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1986:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 256,
                  "nodeType": "ExpressionStatement",
                  "src": "1986:55:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 258,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 239,
                        "src": "2077:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 259,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "2083:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2083:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 261,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "2095:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 262,
                        "name": "isAuthorised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 243,
                        "src": "2103:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 257,
                      "name": "AuthorisationChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 227,
                      "src": "2056:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (bytes32,address,address,bool)"
                      }
                    },
                    "id": 263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2056:60:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 264,
                  "nodeType": "EmitStatement",
                  "src": "2051:65:3"
                }
              ]
            },
            "documentation": "@dev Sets or clears an authorisation.\nAuthorisations are specific to the caller. Any account can set an authorisation\nfor any name, but the authorisation that is checked will be that of the\ncurrent owner of a name. Thus, transferring a name effectively clears any\nexisting authorisations, and new authorisations can be set in advance of\nan ownership transfer if desired.\n     * @param node The name to change the authorisation on.\n@param target The address that is to be authorised or deauthorised.\n@param isAuthorised True if the address should be authorised, or false if it should be deauthorised.",
            "id": 266,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAuthorisation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 239,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 266,
                  "src": "1918:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 238,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1918:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 266,
                  "src": "1932:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1932:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 243,
                  "name": "isAuthorised",
                  "nodeType": "VariableDeclaration",
                  "scope": 266,
                  "src": "1948:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 242,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1948:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1917:49:3"
            },
            "returnParameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1976:0:3"
            },
            "scope": 353,
            "src": "1892:231:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 294,
              "nodeType": "Block",
              "src": "2193:127:3",
              "statements": [
                {
                  "assignments": [
                    274
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 274,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 294,
                      "src": "2203:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 273,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2203:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 279,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 277,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 268,
                        "src": "2229:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 275,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 209,
                        "src": "2219:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3782",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3767,
                      "src": "2219:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2219:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2203:31:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 280,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 274,
                        "src": "2251:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 281,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "2260:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2260:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2251:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 284,
                            "name": "authorisations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 217,
                            "src": "2274:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
                              "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
                            }
                          },
                          "id": 286,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 285,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 268,
                            "src": "2289:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2274:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 288,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 287,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 274,
                          "src": "2295:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2274:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 291,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 289,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "2302:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2302:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2274:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2251:62:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 272,
                  "id": 293,
                  "nodeType": "Return",
                  "src": "2244:69:3"
                }
              ]
            },
            "documentation": null,
            "id": 295,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAuthorised",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 268,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 295,
                  "src": "2151:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 267,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2151:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2150:14:3"
            },
            "returnParameters": {
              "id": 272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 295,
                  "src": "2187:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 270,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2187:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2186:6:3"
            },
            "scope": 353,
            "src": "2129:191:3",
            "stateMutability": "view",
            "superFunction": 617,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 351,
              "nodeType": "Block",
              "src": "2409:283:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 304,
                      "name": "results",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 302,
                      "src": "2419:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                        "typeString": "bytes memory[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 308,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 298,
                            "src": "2441:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2441:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2429:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_$dyn_memory_$",
                          "typeString": "function (uint256) pure returns (bytes memory[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 305,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "2433:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 306,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "2433:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        }
                      },
                      "id": 310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2429:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory",
                        "typeString": "bytes memory[] memory"
                      }
                    },
                    "src": "2419:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                      "typeString": "bytes memory[] memory"
                    }
                  },
                  "id": 312,
                  "nodeType": "ExpressionStatement",
                  "src": "2419:34:3"
                },
                {
                  "body": {
                    "id": 347,
                    "nodeType": "Block",
                    "src": "2501:161:3",
                    "statements": [
                      {
                        "assignments": [
                          325,
                          327
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 325,
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 347,
                            "src": "2516:12:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 324,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2516:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 327,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 347,
                            "src": "2530:19:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 326,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2530:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 336,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 332,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 298,
                                "src": "2580:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                                  "typeString": "bytes calldata[] calldata"
                                }
                              },
                              "id": 334,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 333,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 314,
                                "src": "2585:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2580:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 329,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4185,
                                  "src": "2561:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PublicResolver_$353",
                                    "typeString": "contract PublicResolver"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PublicResolver_$353",
                                    "typeString": "contract PublicResolver"
                                  }
                                ],
                                "id": 328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2553:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2553:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 331,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2553:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2553:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2515:73:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 338,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 325,
                              "src": "2610:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 337,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4136,
                              4137
                            ],
                            "referencedDeclaration": 4136,
                            "src": "2602:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2602:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 340,
                        "nodeType": "ExpressionStatement",
                        "src": "2602:16:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 341,
                              "name": "results",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 302,
                              "src": "2632:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              }
                            },
                            "id": 343,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 342,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 314,
                              "src": "2640:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2632:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 344,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 327,
                            "src": "2645:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "2632:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 346,
                        "nodeType": "ExpressionStatement",
                        "src": "2632:19:3"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 317,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 314,
                      "src": "2479:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 318,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 298,
                        "src": "2483:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      "id": 319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2483:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2479:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 348,
                  "initializationExpression": {
                    "assignments": [
                      314
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 314,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 348,
                        "src": "2467:6:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2467:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 316,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2476:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2467:10:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2496:3:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 321,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 314,
                        "src": "2496:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 323,
                    "nodeType": "ExpressionStatement",
                    "src": "2496:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "2463:199:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 349,
                    "name": "results",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 302,
                    "src": "2678:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                      "typeString": "bytes memory[] memory"
                    }
                  },
                  "functionReturnParameters": 303,
                  "id": 350,
                  "nodeType": "Return",
                  "src": "2671:14:3"
                }
              ]
            },
            "documentation": null,
            "id": 352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "multicall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 298,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "2345:21:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 296,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2345:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 297,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2345:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2344:23:3"
            },
            "returnParameters": {
              "id": 303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 302,
                  "name": "results",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "2385:22:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 300,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2385:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 301,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2385:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2384:24:3"
            },
            "scope": 353,
            "src": "2326:366:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 354,
        "src": "520:2174:3"
      }
    ],
    "src": "0:2695:3"
  },
  "legacyAST": {
    "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/PublicResolver.sol",
    "exportedSymbols": {
      "PublicResolver": [
        353
      ]
    },
    "id": 354,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 181,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:3"
      },
      {
        "id": 182,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "24:33:3"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "@ensdomains/ens/contracts/ENS.sol",
        "id": 183,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 3783,
        "src": "59:43:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/ABIResolver.sol",
        "file": "./profiles/ABIResolver.sol",
        "id": 184,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 799,
        "src": "103:36:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/AddrResolver.sol",
        "file": "./profiles/AddrResolver.sol",
        "id": 185,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 958,
        "src": "140:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/ContentHashResolver.sol",
        "file": "./profiles/ContentHashResolver.sol",
        "id": 186,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1028,
        "src": "178:44:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/DNSResolver.sol",
        "file": "./profiles/DNSResolver.sol",
        "id": 187,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1459,
        "src": "223:36:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/InterfaceResolver.sol",
        "file": "./profiles/InterfaceResolver.sol",
        "id": 188,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1646,
        "src": "260:42:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/NameResolver.sol",
        "file": "./profiles/NameResolver.sol",
        "id": 189,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1716,
        "src": "303:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/PubkeyResolver.sol",
        "file": "./profiles/PubkeyResolver.sol",
        "id": 190,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1807,
        "src": "341:39:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/resolvers/contracts/profiles/TextResolver.sol",
        "file": "./profiles/TextResolver.sol",
        "id": 191,
        "nodeType": "ImportDirective",
        "scope": 354,
        "sourceUnit": 1890,
        "src": "381:37:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 192,
              "name": "ABIResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 798,
              "src": "547:11:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ABIResolver_$798",
                "typeString": "contract ABIResolver"
              }
            },
            "id": 193,
            "nodeType": "InheritanceSpecifier",
            "src": "547:11:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 194,
              "name": "AddrResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 957,
              "src": "560:12:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AddrResolver_$957",
                "typeString": "contract AddrResolver"
              }
            },
            "id": 195,
            "nodeType": "InheritanceSpecifier",
            "src": "560:12:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 196,
              "name": "ContentHashResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1027,
              "src": "574:19:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContentHashResolver_$1027",
                "typeString": "contract ContentHashResolver"
              }
            },
            "id": 197,
            "nodeType": "InheritanceSpecifier",
            "src": "574:19:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 198,
              "name": "DNSResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1458,
              "src": "595:11:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSResolver_$1458",
                "typeString": "contract DNSResolver"
              }
            },
            "id": 199,
            "nodeType": "InheritanceSpecifier",
            "src": "595:11:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 200,
              "name": "InterfaceResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1645,
              "src": "608:17:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_InterfaceResolver_$1645",
                "typeString": "contract InterfaceResolver"
              }
            },
            "id": 201,
            "nodeType": "InheritanceSpecifier",
            "src": "608:17:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 202,
              "name": "NameResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1715,
              "src": "627:12:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NameResolver_$1715",
                "typeString": "contract NameResolver"
              }
            },
            "id": 203,
            "nodeType": "InheritanceSpecifier",
            "src": "627:12:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 204,
              "name": "PubkeyResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1806,
              "src": "641:14:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PubkeyResolver_$1806",
                "typeString": "contract PubkeyResolver"
              }
            },
            "id": 205,
            "nodeType": "InheritanceSpecifier",
            "src": "641:14:3"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 206,
              "name": "TextResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1889,
              "src": "657:12:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TextResolver_$1889",
                "typeString": "contract TextResolver"
              }
            },
            "id": 207,
            "nodeType": "InheritanceSpecifier",
            "src": "657:12:3"
          }
        ],
        "contractDependencies": [
          662,
          798,
          957,
          1027,
          1458,
          1645,
          1715,
          1806,
          1889
        ],
        "contractKind": "contract",
        "documentation": "A simple resolver anyone can use; only allows the owner of a node to set its\naddress.",
        "fullyImplemented": true,
        "id": 353,
        "linearizedBaseContracts": [
          353,
          1889,
          1806,
          1715,
          1645,
          1458,
          1027,
          957,
          798,
          662
        ],
        "name": "PublicResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 209,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 353,
            "src": "676:7:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$3782",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 208,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3782,
              "src": "676:3:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3782",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 217,
            "name": "authorisations",
            "nodeType": "VariableDeclaration",
            "scope": 353,
            "src": "943:80:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
              "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
            },
            "typeName": {
              "id": 216,
              "keyType": {
                "id": 210,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "951:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "943:58:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
                "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
              },
              "valueType": {
                "id": 215,
                "keyType": {
                  "id": 211,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "968:7:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "960:40:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                  "typeString": "mapping(address => mapping(address => bool))"
                },
                "valueType": {
                  "id": 214,
                  "keyType": {
                    "id": 212,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "985:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "977:22:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 213,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "994:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 227,
            "name": "AuthorisationChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 226,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 219,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1057:20:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 218,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1057:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 221,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1079:21:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 220,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1079:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 223,
                  "indexed": true,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1102:22:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 222,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1102:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 225,
                  "indexed": false,
                  "name": "isAuthorised",
                  "nodeType": "VariableDeclaration",
                  "scope": 227,
                  "src": "1126:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 224,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1126:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1056:88:3"
            },
            "src": "1030:115:3"
          },
          {
            "body": {
              "id": 236,
              "nodeType": "Block",
              "src": "1180:27:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 234,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 232,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 209,
                      "src": "1190:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 233,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 229,
                      "src": "1196:4:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "1190:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 235,
                  "nodeType": "ExpressionStatement",
                  "src": "1190:10:3"
                }
              ]
            },
            "documentation": null,
            "id": 237,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 229,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 237,
                  "src": "1163:8:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$3782",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 228,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3782,
                    "src": "1163:3:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1162:10:3"
            },
            "returnParameters": {
              "id": 231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1180:0:3"
            },
            "scope": 353,
            "src": "1151:56:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 265,
              "nodeType": "Block",
              "src": "1976:147:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 255,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 246,
                            "name": "authorisations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 217,
                            "src": "1986:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
                              "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
                            }
                          },
                          "id": 251,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 247,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 239,
                            "src": "2001:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1986:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 252,
                        "indexExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 248,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4133,
                            "src": "2007:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2007:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1986:32:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 253,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 250,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "2019:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1986:40:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 254,
                      "name": "isAuthorised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 243,
                      "src": "2029:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1986:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 256,
                  "nodeType": "ExpressionStatement",
                  "src": "1986:55:3"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 258,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 239,
                        "src": "2077:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 259,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "2083:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2083:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 261,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 241,
                        "src": "2095:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 262,
                        "name": "isAuthorised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 243,
                        "src": "2103:12:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 257,
                      "name": "AuthorisationChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 227,
                      "src": "2056:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (bytes32,address,address,bool)"
                      }
                    },
                    "id": 263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2056:60:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 264,
                  "nodeType": "EmitStatement",
                  "src": "2051:65:3"
                }
              ]
            },
            "documentation": "@dev Sets or clears an authorisation.\nAuthorisations are specific to the caller. Any account can set an authorisation\nfor any name, but the authorisation that is checked will be that of the\ncurrent owner of a name. Thus, transferring a name effectively clears any\nexisting authorisations, and new authorisations can be set in advance of\nan ownership transfer if desired.\n     * @param node The name to change the authorisation on.\n@param target The address that is to be authorised or deauthorised.\n@param isAuthorised True if the address should be authorised, or false if it should be deauthorised.",
            "id": 266,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setAuthorisation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 239,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 266,
                  "src": "1918:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 238,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1918:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 241,
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 266,
                  "src": "1932:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1932:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 243,
                  "name": "isAuthorised",
                  "nodeType": "VariableDeclaration",
                  "scope": 266,
                  "src": "1948:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 242,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1948:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1917:49:3"
            },
            "returnParameters": {
              "id": 245,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1976:0:3"
            },
            "scope": 353,
            "src": "1892:231:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 294,
              "nodeType": "Block",
              "src": "2193:127:3",
              "statements": [
                {
                  "assignments": [
                    274
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 274,
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 294,
                      "src": "2203:13:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 273,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2203:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 279,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 277,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 268,
                        "src": "2229:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 275,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 209,
                        "src": "2219:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3782",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3767,
                      "src": "2219:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2219:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2203:31:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 280,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 274,
                        "src": "2251:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 281,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "2260:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2260:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2251:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 284,
                            "name": "authorisations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 217,
                            "src": "2274:14:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$",
                              "typeString": "mapping(bytes32 => mapping(address => mapping(address => bool)))"
                            }
                          },
                          "id": 286,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 285,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 268,
                            "src": "2289:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2274:20:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 288,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 287,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 274,
                          "src": "2295:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2274:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 291,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 289,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "2302:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2302:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2274:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2251:62:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 272,
                  "id": 293,
                  "nodeType": "Return",
                  "src": "2244:69:3"
                }
              ]
            },
            "documentation": null,
            "id": 295,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAuthorised",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 269,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 268,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 295,
                  "src": "2151:12:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 267,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2151:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2150:14:3"
            },
            "returnParameters": {
              "id": 272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 271,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 295,
                  "src": "2187:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 270,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2187:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2186:6:3"
            },
            "scope": 353,
            "src": "2129:191:3",
            "stateMutability": "view",
            "superFunction": 617,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 351,
              "nodeType": "Block",
              "src": "2409:283:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 304,
                      "name": "results",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 302,
                      "src": "2419:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                        "typeString": "bytes memory[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 308,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 298,
                            "src": "2441:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                              "typeString": "bytes calldata[] calldata"
                            }
                          },
                          "id": 309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2441:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2429:11:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_$dyn_memory_$",
                          "typeString": "function (uint256) pure returns (bytes memory[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 305,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "2433:5:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 306,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "2433:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        }
                      },
                      "id": 310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2429:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory",
                        "typeString": "bytes memory[] memory"
                      }
                    },
                    "src": "2419:34:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                      "typeString": "bytes memory[] memory"
                    }
                  },
                  "id": 312,
                  "nodeType": "ExpressionStatement",
                  "src": "2419:34:3"
                },
                {
                  "body": {
                    "id": 347,
                    "nodeType": "Block",
                    "src": "2501:161:3",
                    "statements": [
                      {
                        "assignments": [
                          325,
                          327
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 325,
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 347,
                            "src": "2516:12:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 324,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "2516:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 327,
                            "name": "result",
                            "nodeType": "VariableDeclaration",
                            "scope": 347,
                            "src": "2530:19:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 326,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2530:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 336,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 332,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 298,
                                "src": "2580:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                                  "typeString": "bytes calldata[] calldata"
                                }
                              },
                              "id": 334,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 333,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 314,
                                "src": "2585:1:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2580:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 329,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4185,
                                  "src": "2561:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PublicResolver_$353",
                                    "typeString": "contract PublicResolver"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PublicResolver_$353",
                                    "typeString": "contract PublicResolver"
                                  }
                                ],
                                "id": 328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2553:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2553:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 331,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2553:26:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2553:35:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2515:73:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 338,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 325,
                              "src": "2610:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 337,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4136,
                              4137
                            ],
                            "referencedDeclaration": 4136,
                            "src": "2602:7:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2602:16:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 340,
                        "nodeType": "ExpressionStatement",
                        "src": "2602:16:3"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 341,
                              "name": "results",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 302,
                              "src": "2632:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                                "typeString": "bytes memory[] memory"
                              }
                            },
                            "id": 343,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 342,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 314,
                              "src": "2640:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2632:10:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 344,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 327,
                            "src": "2645:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "2632:19:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 346,
                        "nodeType": "ExpressionStatement",
                        "src": "2632:19:3"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 320,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 317,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 314,
                      "src": "2479:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 318,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 298,
                        "src": "2483:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                          "typeString": "bytes calldata[] calldata"
                        }
                      },
                      "id": 319,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2483:11:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2479:15:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 348,
                  "initializationExpression": {
                    "assignments": [
                      314
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 314,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 348,
                        "src": "2467:6:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "2467:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 316,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2476:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2467:10:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2496:3:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 321,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 314,
                        "src": "2496:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 323,
                    "nodeType": "ExpressionStatement",
                    "src": "2496:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "2463:199:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 349,
                    "name": "results",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 302,
                    "src": "2678:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                      "typeString": "bytes memory[] memory"
                    }
                  },
                  "functionReturnParameters": 303,
                  "id": 350,
                  "nodeType": "Return",
                  "src": "2671:14:3"
                }
              ]
            },
            "documentation": null,
            "id": 352,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "multicall",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 298,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "2345:21:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_calldata_$dyn_calldata_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 296,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2345:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 297,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2345:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2344:23:3"
            },
            "returnParameters": {
              "id": 303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 302,
                  "name": "results",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "2385:22:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_memory_$dyn_memory_ptr",
                    "typeString": "bytes[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 300,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "2385:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      }
                    },
                    "id": 301,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2385:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                      "typeString": "bytes[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2384:24:3"
            },
            "scope": 353,
            "src": "2326:366:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 354,
        "src": "520:2174:3"
      }
    ],
    "src": "0:2695:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2020-02-10T18:46:21.022Z",
  "devdoc": {
    "methods": {
      "ABI(bytes32,uint256)": {
        "params": {
          "contentTypes": "A bitwise OR of the ABI formats accepted by the caller.",
          "node": "The ENS node to query"
        },
        "return": "contentType The content type of the return valuedata The ABI data"
      },
      "addr(bytes32)": {
        "params": {
          "node": "The ENS node to query."
        },
        "return": "The associated address."
      },
      "clearDNSZone(bytes32)": {
        "params": {
          "node": "the namehash of the node for which to clear the zone"
        }
      },
      "contenthash(bytes32)": {
        "params": {
          "node": "The ENS node to query."
        },
        "return": "The associated contenthash."
      },
      "dnsRecord(bytes32,bytes32,uint16)": {
        "params": {
          "name": "the keccak-256 hash of the fully-qualified name for which to fetch the record",
          "node": "the namehash of the node for which to fetch the record",
          "resource": "the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types"
        },
        "return": "the DNS record in wire format if present, otherwise empty"
      },
      "hasDNSRecords(bytes32,bytes32)": {
        "params": {
          "name": "the namehash of the node for which to check the records",
          "node": "the namehash of the node for which to check the records"
        }
      },
      "interfaceImplementer(bytes32,bytes4)": {
        "params": {
          "interfaceID": "The EIP 168 interface ID to check for.",
          "node": "The ENS node to query."
        },
        "return": "The address that implements this interface, or 0 if the interface is unsupported."
      },
      "name(bytes32)": {
        "params": {
          "node": "The ENS node to query."
        },
        "return": "The associated name."
      },
      "pubkey(bytes32)": {
        "params": {
          "node": "The ENS node to query"
        },
        "return": "x, y the X and Y coordinates of the curve point for the public key."
      },
      "setABI(bytes32,uint256,bytes)": {
        "params": {
          "contentType": "The content type of the ABI",
          "data": "The ABI data.",
          "node": "The node to update."
        }
      },
      "setAddr(bytes32,address)": {
        "params": {
          "a": "The address to set.",
          "node": "The node to update."
        }
      },
      "setAuthorisation(bytes32,address,bool)": {
        "details": "Sets or clears an authorisation. Authorisations are specific to the caller. Any account can set an authorisation for any name, but the authorisation that is checked will be that of the current owner of a name. Thus, transferring a name effectively clears any existing authorisations, and new authorisations can be set in advance of an ownership transfer if desired.",
        "params": {
          "isAuthorised": "True if the address should be authorised, or false if it should be deauthorised.",
          "node": "The name to change the authorisation on.",
          "target": "The address that is to be authorised or deauthorised."
        }
      },
      "setContenthash(bytes32,bytes)": {
        "params": {
          "hash": "The contenthash to set",
          "node": "The node to update."
        }
      },
      "setDNSRecords(bytes32,bytes)": {
        "params": {
          "data": "the DNS wire format records to set",
          "node": "the namehash of the node for which to set the records"
        }
      },
      "setInterface(bytes32,bytes4,address)": {
        "params": {
          "implementer": "The address of a contract that implements this interface for this node.",
          "interfaceID": "The EIP 168 interface ID.",
          "node": "The node to update."
        }
      },
      "setName(bytes32,string)": {
        "params": {
          "name": "The name to set.",
          "node": "The node to update."
        }
      },
      "setPubkey(bytes32,bytes32,bytes32)": {
        "params": {
          "node": "The ENS node to query",
          "x": "the X coordinate of the curve point for the public key.",
          "y": "the Y coordinate of the curve point for the public key."
        }
      },
      "setText(bytes32,string,string)": {
        "params": {
          "key": "The key to set.",
          "node": "The node to update.",
          "value": "The text data value to set."
        }
      },
      "text(bytes32,string)": {
        "params": {
          "key": "The text data key to query.",
          "node": "The ENS node to query."
        },
        "return": "The associated text data."
      }
    }
  },
  "userdoc": {
    "methods": {
      "ABI(bytes32,uint256)": {
        "notice": "Returns the ABI associated with an ENS node. Defined in EIP205."
      },
      "addr(bytes32)": {
        "notice": "Returns the address associated with an ENS node."
      },
      "clearDNSZone(bytes32)": {
        "notice": "Clear all information for a DNS zone."
      },
      "contenthash(bytes32)": {
        "notice": "Returns the contenthash associated with an ENS node."
      },
      "dnsRecord(bytes32,bytes32,uint16)": {
        "notice": "Obtain a DNS record."
      },
      "hasDNSRecords(bytes32,bytes32)": {
        "notice": "Check if a given node has records."
      },
      "interfaceImplementer(bytes32,bytes4)": {
        "notice": "Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP168 and returns `true` for the specified interfaceID, its address will be returned."
      },
      "name(bytes32)": {
        "notice": "Returns the name associated with an ENS node, for reverse records. Defined in EIP181."
      },
      "pubkey(bytes32)": {
        "notice": "Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619."
      },
      "setABI(bytes32,uint256,bytes)": {
        "notice": "Sets the ABI associated with an ENS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string."
      },
      "setAddr(bytes32,address)": {
        "notice": "Sets the address associated with an ENS node. May only be called by the owner of that node in the ENS registry."
      },
      "setContenthash(bytes32,bytes)": {
        "notice": "Sets the contenthash associated with an ENS node. May only be called by the owner of that node in the ENS registry."
      },
      "setDNSRecords(bytes32,bytes)": {
        "notice": "Set one or more DNS records.  Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied:    a.example.com IN A 1.2.3.4    a.example.com IN A 5.6.7.8    www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied:    a.example.com IN A 1.2.3.4    www.example.com IN CNAME a.example.com.    a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first."
      },
      "setInterface(bytes32,bytes4,address)": {
        "notice": "Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support."
      },
      "setName(bytes32,string)": {
        "notice": "Sets the name associated with an ENS node, for reverse records. May only be called by the owner of that node in the ENS registry."
      },
      "setPubkey(bytes32,bytes32,bytes32)": {
        "notice": "Sets the SECP256k1 public key associated with an ENS node."
      },
      "setText(bytes32,string,string)": {
        "notice": "Sets the text data associated with an ENS node and key. May only be called by the owner of that node in the ENS registry."
      },
      "text(bytes32,string)": {
        "notice": "Returns the text data associated with an ENS node and key."
      }
    },
    "notice": "A simple resolver anyone can use; only allows the owner of a node to set its address."
  }
}