{
  "contractName": "FIFSBurnableRegistrar",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "burningToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "registrationCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rootNode",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_ensAddr",
          "type": "address"
        },
        {
          "name": "_resolver",
          "type": "address"
        },
        {
          "name": "_node",
          "type": "bytes32"
        },
        {
          "name": "_burningToken",
          "type": "address"
        },
        {
          "name": "_startingCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "subnode",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "ClaimSubdomain",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_subnode",
          "type": "bytes32"
        },
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "register",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_burningToken",
          "type": "address"
        }
      ],
      "name": "setBurningToken",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_cost",
          "type": "uint256"
        }
      ],
      "name": "setRegistrationCost",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_subnode",
          "type": "bytes32"
        },
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_resolver",
          "type": "address"
        }
      ],
      "name": "registerWithResolver",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060405160a080610a7d8339810160409081528151602083015191830151606084015160809094015160008054600160a060020a0319908116331790915560028054600160a060020a039586169083161790556003805495851695821695909517909455600191909155600480549290941691909216179091556005556109e18061009c6000396000f3006080604052600436106100a35763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166345210a4a81146100a8578063637e9d5c146100d85780637a76e67d146100f05780638da5cb5b1461012e5780638f4ffcb114610143578063d22057a914610188578063dc4a7f7f146101b9578063f2fde38b146101e0578063f858fc0b1461020e578063faff50a814610245575b600080fd5b3480156100b457600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff6004351661025a565b005b3480156100e457600080fd5b506100d66004356102c5565b3480156100fc57600080fd5b506101056102ee565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561013a57600080fd5b5061010561030a565b34801561014f57600080fd5b506100d66004803573ffffffffffffffffffffffffffffffffffffffff9081169160248035926044351691606435918201910135610326565b34801561019457600080fd5b506100d660043573ffffffffffffffffffffffffffffffffffffffff60243516610399565b3480156101c557600080fd5b506101ce6103c3565b60408051918252519081900360200190f35b3480156101ec57600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff600435166103c9565b34801561021a57600080fd5b506100d660043573ffffffffffffffffffffffffffffffffffffffff6024358116906044351661049c565b34801561025157600080fd5b506101ce610579565b60005473ffffffffffffffffffffffffffffffffffffffff16331461027e57600080fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102e957600080fd5b600555565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff16331461034a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168282604051808383808284378201915050925050506000604051808303816000865af1915050151561039257600080fd5b5050505050565b6003546103bf908390839073ffffffffffffffffffffffffffffffffffffffff1661049c565b5050565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103ed57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116151561040f57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6104a783838361057f565b600060055411156105745760048054600554604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169582019590955261dead602482015260448101929092525192909116916323b872dd916064808201926020929091908290030181600087803b15801561053d57600080fd5b505af1158015610551573d6000803e3d6000fd5b505050506040513d602081101561056757600080fd5b5051151561057457600080fd5b505050565b60015481565b600154604080519182526020808301869052815192839003820183206002547f02571be3000000000000000000000000000000000000000000000000000000008552600485018290529251909360009373ffffffffffffffffffffffffffffffffffffffff16926302571be39260248084019382900301818787803b15801561060757600080fd5b505af115801561061b573d6000803e3d6000fd5b505050506040513d602081101561063157600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81161561065657600080fd5b600254600154604080517f06ab59230000000000000000000000000000000000000000000000000000000081526004810192909252602482018890523060448301525173ffffffffffffffffffffffffffffffffffffffff909216916306ab59239160648082019260009290919082900301818387803b1580156106d957600080fd5b505af11580156106ed573d6000803e3d6000fd5b5050600254604080517f1896f70a0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff88811660248301529151919092169350631896f70a9250604480830192600092919082900301818387803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b5050604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f3b3b57de000000000000000000000000000000000000000000000000000000006004820152905173ffffffffffffffffffffffffffffffffffffffff871693506301ffc9a7925060248083019260209291908290030181600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050506040513d602081101561083c57600080fd5b5051156108d457604080517fd5fa2b000000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff868116602483015291519185169163d5fa2b009160448082019260009290919082900301818387803b1580156108bb57600080fd5b505af11580156108cf573d6000803e3d6000fd5b505050505b600254604080517f5b0fc9c30000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff878116602483015291519190921691635b0fc9c391604480830192600092919082900301818387803b15801561094f57600080fd5b505af1158015610963573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff80871693508716915087907fe27a5a369e0d2c5056ccfcbd5f83f145f43350142d42aaf46ff9a9e461d543df90600090a450505050505600a165627a7a72305820cd8e41b04f22e95546926c7213df8053c4447defacacdea58f04b6f4e6932ba50029",
  "deployedBytecode": "0x6080604052600436106100a35763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166345210a4a81146100a8578063637e9d5c146100d85780637a76e67d146100f05780638da5cb5b1461012e5780638f4ffcb114610143578063d22057a914610188578063dc4a7f7f146101b9578063f2fde38b146101e0578063f858fc0b1461020e578063faff50a814610245575b600080fd5b3480156100b457600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff6004351661025a565b005b3480156100e457600080fd5b506100d66004356102c5565b3480156100fc57600080fd5b506101056102ee565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561013a57600080fd5b5061010561030a565b34801561014f57600080fd5b506100d66004803573ffffffffffffffffffffffffffffffffffffffff9081169160248035926044351691606435918201910135610326565b34801561019457600080fd5b506100d660043573ffffffffffffffffffffffffffffffffffffffff60243516610399565b3480156101c557600080fd5b506101ce6103c3565b60408051918252519081900360200190f35b3480156101ec57600080fd5b506100d673ffffffffffffffffffffffffffffffffffffffff600435166103c9565b34801561021a57600080fd5b506100d660043573ffffffffffffffffffffffffffffffffffffffff6024358116906044351661049c565b34801561025157600080fd5b506101ce610579565b60005473ffffffffffffffffffffffffffffffffffffffff16331461027e57600080fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102e957600080fd5b600555565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff16331461034a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168282604051808383808284378201915050925050506000604051808303816000865af1915050151561039257600080fd5b5050505050565b6003546103bf908390839073ffffffffffffffffffffffffffffffffffffffff1661049c565b5050565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103ed57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116151561040f57600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6104a783838361057f565b600060055411156105745760048054600554604080517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169582019590955261dead602482015260448101929092525192909116916323b872dd916064808201926020929091908290030181600087803b15801561053d57600080fd5b505af1158015610551573d6000803e3d6000fd5b505050506040513d602081101561056757600080fd5b5051151561057457600080fd5b505050565b60015481565b600154604080519182526020808301869052815192839003820183206002547f02571be3000000000000000000000000000000000000000000000000000000008552600485018290529251909360009373ffffffffffffffffffffffffffffffffffffffff16926302571be39260248084019382900301818787803b15801561060757600080fd5b505af115801561061b573d6000803e3d6000fd5b505050506040513d602081101561063157600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81161561065657600080fd5b600254600154604080517f06ab59230000000000000000000000000000000000000000000000000000000081526004810192909252602482018890523060448301525173ffffffffffffffffffffffffffffffffffffffff909216916306ab59239160648082019260009290919082900301818387803b1580156106d957600080fd5b505af11580156106ed573d6000803e3d6000fd5b5050600254604080517f1896f70a0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff88811660248301529151919092169350631896f70a9250604480830192600092919082900301818387803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b5050604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f3b3b57de000000000000000000000000000000000000000000000000000000006004820152905173ffffffffffffffffffffffffffffffffffffffff871693506301ffc9a7925060248083019260209291908290030181600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050506040513d602081101561083c57600080fd5b5051156108d457604080517fd5fa2b000000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff868116602483015291519185169163d5fa2b009160448082019260009290919082900301818387803b1580156108bb57600080fd5b505af11580156108cf573d6000803e3d6000fd5b505050505b600254604080517f5b0fc9c30000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff878116602483015291519190921691635b0fc9c391604480830192600092919082900301818387803b15801561094f57600080fd5b505af1158015610963573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff80871693508716915087907fe27a5a369e0d2c5056ccfcbd5f83f145f43350142d42aaf46ff9a9e461d543df90600090a450505050505600a165627a7a72305820cd8e41b04f22e95546926c7213df8053c4447defacacdea58f04b6f4e6932ba50029",
  "sourceMap": "383:3444:2:-;;;982:319;8:9:-1;5:2;;;30:1;27;20:12;5:2;982:319:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;494:5:17;:18;;-1:-1:-1;;;;;;494:18:17;;;502:10;494:18;;;;1066:3:3;:14;;-1:-1:-1;;;;;1066:14:3;;;;;;;;;1090:15;:34;;;;;;;;;;;;;;;494:18:17;1134:16:3;;;;1224:12:2;:28;;;;;;;;;;;;;;1262:16;:32;383:3444;;;;;;",
  "deployedSourceMap": "383:3444:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2762:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2762:110:2;;;;;;;;;3003:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3003:104:2;;;;;479:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;479:25:2;;;;;;;;;;;;;;;;;;;;;;;238:20:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:17;;;;1886:320:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1886:320:2;;;;;;;;;;;;;;;;;;;;;;;;;;;2500:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2500:155:2;;;;;;;;;510:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;510:31:2;;;;;;;;;;;;;;;;;;;;827:169:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;827:169:17;;;;;;;3480:345:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3480:345:2;;;;;;;;;;;;;;442:23:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;442:23:3;;;;2762:110:2;647:5:17;;;;633:10;:19;625:28;;;;;;2837:12:2;:28;;;;;;;;;;;;;;;2762:110::o;3003:104::-;647:5:17;;;;633:10;:19;625:28;;;;;;3076:16:2;:24;3003:104::o;479:25::-;;;;;;:::o;238:20:17:-;;;;;;:::o;1886:320:2:-;2021:12;;;;1999:10;:35;1991:44;;;;;;2182:4;:9;;2192:5;;2182:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2174:25;;;;;;;;1886:320;;;;;:::o;2500:155::-;2632:15;;2571:77;;2614:8;;2624:6;;2632:15;;2571:42;:77::i;:::-;2500:155;;:::o;510:31::-;;;;:::o;827:169:17:-;647:5;;;;633:10;:19;625:28;;;;;;903:22;;;;;895:31;;;;;;953:5;;;932:37;;;;;;;953:5;;;932:37;;;975:5;:16;;;;;;;;;;;;;;;827:169::o;3480:345:2:-;3588:72;3632:8;3642:6;3650:9;3588:43;:72::i;:::-;3717:1;3698:16;;:20;3694:125;;;3742:12;;;3790:16;;3742:65;;;;;;:12;:65;;;;;;;;;;588:6;3742:65;;;;;;;;;;;;:12;;;;;:25;;:65;;;;;;;;;;;;;;;:12;;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;3742:65:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3742:65:2;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3742:65:2;3734:74;;;;;;;;3480:345;;;:::o;442:23:3:-;;;;:::o;1899:622::-;2032:8;;2022:29;;;;;;;;;;;;;;;;;;;;;;;2084:3;;:15;;;;;;;;;;;2022:29;;2007:12;;2084:3;;;:9;;:15;;;;;;;;;;2007:12;2084:3;:15;;;5:2:-1;;;;30:1;27;20:12;5:2;2084:15:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2084:15:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2084:15:3;;-1:-1:-1;2117:26:3;;;;2109:35;;;;;;2155:3;;;2175:8;2155:54;;;;;;;;;;;;;;;;;;;2203:4;2155:54;;;;;:3;;;;;:19;;:54;;;;;:3;;:54;;;;;;;;:3;;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2155:54:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2219:3:3;;:32;;;;;;;;;;;;:3;:32;;;;;;;;;:3;;;;;-1:-1:-1;2219:15:3;;-1:-1:-1;2219:32:3;;;;;:3;;:32;;;;;;;:3;;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;2219:32:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2265:46:3;;;;;;2293:17;2265:46;;;;;;:27;;;;-1:-1:-1;2265:27:3;;-1:-1:-1;2265:46:3;;;;;;;;;;;;;;-1:-1:-1;2265:27:3;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;2265:46:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2265:46:3;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2265:46:3;2261:108;;;2327:31;;;;;;;;;;;;:17;:31;;;;;;;;;:17;;;;;;:31;;;;;;;;;;;;;;;;:17;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;2327:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2327:31:3;;;;2261:108;2420:3;;:26;;;;;;;;;;;;:3;:26;;;;;;;;;:3;;;;;:12;;:26;;;;;:3;;:26;;;;;;;:3;;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;2420:26:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;2462:52:3;;;;;;;-1:-1:-1;2462:52:3;;;-1:-1:-1;2477:8:3;;2462:52;;;;;1899:622;;;;;:::o",
  "source": "pragma solidity 0.4.24;\n\nimport \"./interface/ApproveAndCallReceiver.sol\";\nimport \"./zeppelin/ERC20.sol\";\nimport \"./zeppelin/Ownable.sol\";\nimport \"./FIFSResolvingRegistrar.sol\";\n\n\n/**\n * A registrar that allocates subdomains to the first person who claims them by burning the required\n * amount of tokens.\n\n * Note: requires the token to support the `approveAndCall()` interface.\n */\ncontract FIFSBurnableRegistrar is Ownable, ApproveAndCallReceiver, FIFSResolvingRegistrar {\n    ERC20 public burningToken;\n    uint256 public registrationCost;\n\n    address private constant BURN_ADDRESS = 0xdead;\n\n    /**\n     * Constructor.\n     * @param _ensAddr The address of the ENS registry.\n     * @param _resolver The address of the default resolver to use for subdomains.\n     * @param _node The node that this registrar administers.\n     * @param _burningToken The token to be burned for claiming addresses.\n     * @param _startingCost The initial cost of claiming an address.\n     */\n    constructor(\n        AbstractENS _ensAddr,\n        IPublicResolver _resolver,\n        bytes32 _node,\n        ERC20 _burningToken,\n        uint256 _startingCost\n    ) public Ownable FIFSResolvingRegistrar(_ensAddr, _resolver, _node) {\n        burningToken = _burningToken;\n        registrationCost = _startingCost;\n    }\n\n    /**\n     * `approveAndCall()` callback.\n     * Expects to register a subdomain via an external call to `register()` or\n     * `registerWithResolver()` if the `_amount` is greater than or equal to `registrationCost`.\n     * Burns `registrationCost` number of tokens from the sender.\n     * @param _from The address of the claimer.\n     * @param _amount The amount of tokens approved by the claimer.\n     * @param _token The address of the token (unused).\n     * @param _data An encoded call to `registerWithResolver()`.\n     */\n    // solhint-disable-next-line no-unused-vars\n    function receiveApproval(address _from, uint256 _amount, address _token, bytes _data) external {\n        require(msg.sender == address(burningToken));\n\n        // Make the external call and if successful, burn the tokens\n        // solhint-disable-next-line avoid-low-level-calls\n        require(this.call(_data));\n    }\n\n    /**\n     * Register a subdomain with the default resolver if it hasn't been claimed yet.\n     * Overwrites `FIFSResolvingRegistrar.register()`, to avoid polymorphism.\n     * @param _subnode The hash of the label to register.\n     * @param _owner The address of the new owner.\n     */\n    function register(bytes32 _subnode, address _owner) external {\n        FIFSBurnableRegistrar.registerWithResolver(_subnode, _owner, defaultResolver);\n    }\n\n    /**\n     * Set the token to be burnt.\n     * @param _burningToken The token to be burnt.\n     */\n    function setBurningToken(ERC20 _burningToken) external onlyOwner {\n        burningToken = _burningToken;\n    }\n\n    /**\n     * Set registration cost (in tokens) for claiming a subdomain.\n     * @param _cost The cost (in tokens).\n     */\n    function setRegistrationCost(uint256 _cost) external onlyOwner {\n        registrationCost = _cost;\n    }\n\n    /**\n     * Register a subdomain if it hasn't been claimed yet.\n     * Requires the _owner to have approved at least the amount of the requiredCost to this\n     * contract for the burningToken.\n     * @param _subnode The hash of the label to register.\n     * @param _owner The address of the new owner.\n     * @param _resolver The address of the resolver.\n     */\n    function registerWithResolver(bytes32 _subnode, address _owner, IPublicResolver _resolver) public {\n        FIFSResolvingRegistrar.registerWithResolver(_subnode, _owner, _resolver);\n\n        // Burn tokens\n        if (registrationCost > 0) {\n            require(burningToken.transferFrom(_owner, BURN_ADDRESS, registrationCost));\n        }\n    }\n}\n",
  "sourcePath": "/Users/brett/Development/aragon/aragon-id/contracts/FIFSBurnableRegistrar.sol",
  "ast": {
    "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/FIFSBurnableRegistrar.sol",
    "exportedSymbols": {
      "FIFSBurnableRegistrar": [
        417
      ]
    },
    "id": 418,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 270,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/interface/ApproveAndCallReceiver.sol",
        "file": "./interface/ApproveAndCallReceiver.sol",
        "id": 271,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 628,
        "src": "25:48:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/zeppelin/ERC20.sol",
        "file": "./zeppelin/ERC20.sol",
        "id": 272,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 3243,
        "src": "74:30:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/zeppelin/Ownable.sol",
        "file": "./zeppelin/Ownable.sol",
        "id": 273,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 3328,
        "src": "105:32:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/FIFSResolvingRegistrar.sol",
        "file": "./FIFSResolvingRegistrar.sol",
        "id": 274,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 556,
        "src": "138:38:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 275,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3327,
              "src": "417:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$3327",
                "typeString": "contract Ownable"
              }
            },
            "id": 276,
            "nodeType": "InheritanceSpecifier",
            "src": "417:7:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 277,
              "name": "ApproveAndCallReceiver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 627,
              "src": "426:22:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ApproveAndCallReceiver_$627",
                "typeString": "contract ApproveAndCallReceiver"
              }
            },
            "id": 278,
            "nodeType": "InheritanceSpecifier",
            "src": "426:22:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 279,
              "name": "FIFSResolvingRegistrar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 555,
              "src": "450:22:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FIFSResolvingRegistrar_$555",
                "typeString": "contract FIFSResolvingRegistrar"
              }
            },
            "id": 280,
            "nodeType": "InheritanceSpecifier",
            "src": "450:22:2"
          }
        ],
        "contractDependencies": [
          555,
          575,
          627,
          3327
        ],
        "contractKind": "contract",
        "documentation": "A registrar that allocates subdomains to the first person who claims them by burning the required\namount of tokens.\nNote: requires the token to support the `approveAndCall()` interface.",
        "fullyImplemented": true,
        "id": 417,
        "linearizedBaseContracts": [
          417,
          555,
          575,
          627,
          3327
        ],
        "name": "FIFSBurnableRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 282,
            "name": "burningToken",
            "nodeType": "VariableDeclaration",
            "scope": 417,
            "src": "479:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$3242",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 281,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3242,
              "src": "479:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$3242",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 284,
            "name": "registrationCost",
            "nodeType": "VariableDeclaration",
            "scope": 417,
            "src": "510:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 283,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "510:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 287,
            "name": "BURN_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 417,
            "src": "548:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 285,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "548:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307864656164",
              "id": 286,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "588:6:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_57005_by_1",
                "typeString": "int_const 57005"
              },
              "value": "0xdead"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 315,
              "nodeType": "Block",
              "src": "1214:87:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 307,
                      "name": "burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 282,
                      "src": "1224:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 308,
                      "name": "_burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 295,
                      "src": "1239:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "1224:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 310,
                  "nodeType": "ExpressionStatement",
                  "src": "1224:28:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 311,
                      "name": "registrationCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 284,
                      "src": "1262:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 312,
                      "name": "_startingCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 297,
                      "src": "1281:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1262:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 314,
                  "nodeType": "ExpressionStatement",
                  "src": "1262:32:2"
                }
              ]
            },
            "documentation": "Constructor.\n@param _ensAddr The address of the ENS registry.\n@param _resolver The address of the default resolver to use for subdomains.\n@param _node The node that this registrar administers.\n@param _burningToken The token to be burned for claiming addresses.\n@param _startingCost The initial cost of claiming an address.",
            "id": 316,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 300,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 299,
                  "name": "Ownable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3327,
                  "src": "1155:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Ownable_$3327_$",
                    "typeString": "type(contract Ownable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1155:7:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 302,
                    "name": "_ensAddr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 289,
                    "src": "1186:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractENS_$3407",
                      "typeString": "contract AbstractENS"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 303,
                    "name": "_resolver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 291,
                    "src": "1196:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPublicResolver_$613",
                      "typeString": "contract IPublicResolver"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 304,
                    "name": "_node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 293,
                    "src": "1207:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 305,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 301,
                  "name": "FIFSResolvingRegistrar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 555,
                  "src": "1163:22:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FIFSResolvingRegistrar_$555_$",
                    "typeString": "type(contract FIFSResolvingRegistrar)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1163:50:2"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 289,
                  "name": "_ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1003:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AbstractENS_$3407",
                    "typeString": "contract AbstractENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 288,
                    "name": "AbstractENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3407,
                    "src": "1003:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractENS_$3407",
                      "typeString": "contract AbstractENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 291,
                  "name": "_resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1033:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPublicResolver_$613",
                    "typeString": "contract IPublicResolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 290,
                    "name": "IPublicResolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 613,
                    "src": "1033:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPublicResolver_$613",
                      "typeString": "contract IPublicResolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 293,
                  "name": "_node",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1068:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 292,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1068:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 295,
                  "name": "_burningToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1091:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$3242",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 294,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3242,
                    "src": "1091:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 297,
                  "name": "_startingCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1120:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1120:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "993:154:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1214:0:2"
            },
            "scope": 417,
            "src": "982:319:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 343,
              "nodeType": "Block",
              "src": "1981:225:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 328,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3422,
                            "src": "1999:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1999:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 331,
                              "name": "burningToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 282,
                              "src": "2021:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$3242",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$3242",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2013:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2013:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1999:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3425,
                        3426
                      ],
                      "referencedDeclaration": 3425,
                      "src": "1991:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1991:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 335,
                  "nodeType": "ExpressionStatement",
                  "src": "1991:44:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 339,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 324,
                            "src": "2192:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 337,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3461,
                            "src": "2182:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FIFSBurnableRegistrar_$417",
                              "typeString": "contract FIFSBurnableRegistrar"
                            }
                          },
                          "id": 338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2182:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2182:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 336,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3425,
                        3426
                      ],
                      "referencedDeclaration": 3425,
                      "src": "2174:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2174:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 342,
                  "nodeType": "ExpressionStatement",
                  "src": "2174:25:2"
                }
              ]
            },
            "documentation": "`approveAndCall()` callback.\nExpects to register a subdomain via an external call to `register()` or\n`registerWithResolver()` if the `_amount` is greater than or equal to `registrationCost`.\nBurns `registrationCost` number of tokens from the sender.\n@param _from The address of the claimer.\n@param _amount The amount of tokens approved by the claimer.\n@param _token The address of the token (unused).\n@param _data An encoded call to `registerWithResolver()`.",
            "id": 344,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "receiveApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 318,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1911:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 317,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1911:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 320,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1926:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 319,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1926:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 322,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1943:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 321,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1943:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 324,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1959:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 323,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1959:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1910:61:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 326,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1981:0:2"
            },
            "scope": 417,
            "src": "1886:320:2",
            "stateMutability": "nonpayable",
            "superFunction": 626,
            "visibility": "external"
          },
          {
            "body": {
              "id": 359,
              "nodeType": "Block",
              "src": "2561:94:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 354,
                        "name": "_subnode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 346,
                        "src": "2614:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 355,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 348,
                        "src": "2624:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 356,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 430,
                        "src": "2632:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 351,
                        "name": "FIFSBurnableRegistrar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 417,
                        "src": "2571:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FIFSBurnableRegistrar_$417_$",
                          "typeString": "type(contract FIFSBurnableRegistrar)"
                        }
                      },
                      "id": 353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerWithResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 416,
                      "src": "2571:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IPublicResolver_$613_$returns$__$",
                        "typeString": "function (bytes32,address,contract IPublicResolver)"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2571:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 358,
                  "nodeType": "ExpressionStatement",
                  "src": "2571:77:2"
                }
              ]
            },
            "documentation": "Register a subdomain with the default resolver if it hasn't been claimed yet.\nOverwrites `FIFSResolvingRegistrar.register()`, to avoid polymorphism.\n@param _subnode The hash of the label to register.\n@param _owner The address of the new owner.",
            "id": 360,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "register",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 346,
                  "name": "_subnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 360,
                  "src": "2518:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 345,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2518:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 348,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 360,
                  "src": "2536:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 347,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2536:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2517:34:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2561:0:2"
            },
            "scope": 417,
            "src": "2500:155:2",
            "stateMutability": "nonpayable",
            "superFunction": 477,
            "visibility": "external"
          },
          {
            "body": {
              "id": 371,
              "nodeType": "Block",
              "src": "2827:45:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 367,
                      "name": "burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 282,
                      "src": "2837:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 368,
                      "name": "_burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 362,
                      "src": "2852:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "2837:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 370,
                  "nodeType": "ExpressionStatement",
                  "src": "2837:28:2"
                }
              ]
            },
            "documentation": "Set the token to be burnt.\n@param _burningToken The token to be burnt.",
            "id": 372,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 365,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 364,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3301,
                  "src": "2817:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2817:9:2"
              }
            ],
            "name": "setBurningToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 362,
                  "name": "_burningToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "2787:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$3242",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 361,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3242,
                    "src": "2787:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2786:21:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 366,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2827:0:2"
            },
            "scope": 417,
            "src": "2762:110:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 383,
              "nodeType": "Block",
              "src": "3066:41:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 379,
                      "name": "registrationCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 284,
                      "src": "3076:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 380,
                      "name": "_cost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 374,
                      "src": "3095:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3076:24:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 382,
                  "nodeType": "ExpressionStatement",
                  "src": "3076:24:2"
                }
              ]
            },
            "documentation": "Set registration cost (in tokens) for claiming a subdomain.\n@param _cost The cost (in tokens).",
            "id": 384,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 377,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 376,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3301,
                  "src": "3056:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3056:9:2"
              }
            ],
            "name": "setRegistrationCost",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 374,
                  "name": "_cost",
                  "nodeType": "VariableDeclaration",
                  "scope": 384,
                  "src": "3032:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 373,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3032:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3031:15:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3066:0:2"
            },
            "scope": 417,
            "src": "3003:104:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 415,
              "nodeType": "Block",
              "src": "3578:247:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 396,
                        "name": "_subnode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 386,
                        "src": "3632:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 397,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 388,
                        "src": "3642:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 398,
                        "name": "_resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 390,
                        "src": "3650:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 393,
                        "name": "FIFSResolvingRegistrar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "3588:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FIFSResolvingRegistrar_$555_$",
                          "typeString": "type(contract FIFSResolvingRegistrar)"
                        }
                      },
                      "id": 395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerWithResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 554,
                      "src": "3588:43:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IPublicResolver_$613_$returns$__$",
                        "typeString": "function (bytes32,address,contract IPublicResolver)"
                      }
                    },
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3588:72:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 400,
                  "nodeType": "ExpressionStatement",
                  "src": "3588:72:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 401,
                      "name": "registrationCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 284,
                      "src": "3698:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3717:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3698:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 414,
                  "nodeType": "IfStatement",
                  "src": "3694:125:2",
                  "trueBody": {
                    "id": 413,
                    "nodeType": "Block",
                    "src": "3720:99:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 407,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 388,
                                  "src": "3768:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 408,
                                  "name": "BURN_ADDRESS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 287,
                                  "src": "3776:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 409,
                                  "name": "registrationCost",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 284,
                                  "src": "3790:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 405,
                                  "name": "burningToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 282,
                                  "src": "3742:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$3242",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 406,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferFrom",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3224,
                                "src": "3742:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256) external returns (bool)"
                                }
                              },
                              "id": 410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3742:65:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 404,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3425,
                              3426
                            ],
                            "referencedDeclaration": 3425,
                            "src": "3734:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3734:74:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 412,
                        "nodeType": "ExpressionStatement",
                        "src": "3734:74:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "Register a subdomain if it hasn't been claimed yet.\nRequires the _owner to have approved at least the amount of the requiredCost to this\ncontract for the burningToken.\n@param _subnode The hash of the label to register.\n@param _owner The address of the new owner.\n@param _resolver The address of the resolver.",
            "id": 416,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "registerWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 386,
                  "name": "_subnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 416,
                  "src": "3510:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 385,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3510:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 388,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 416,
                  "src": "3528:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 387,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3528:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 390,
                  "name": "_resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 416,
                  "src": "3544:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPublicResolver_$613",
                    "typeString": "contract IPublicResolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 389,
                    "name": "IPublicResolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 613,
                    "src": "3544:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPublicResolver_$613",
                      "typeString": "contract IPublicResolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3509:61:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3578:0:2"
            },
            "scope": 417,
            "src": "3480:345:2",
            "stateMutability": "nonpayable",
            "superFunction": 554,
            "visibility": "public"
          }
        ],
        "scope": 418,
        "src": "383:3444:2"
      }
    ],
    "src": "0:3828:2"
  },
  "legacyAST": {
    "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/FIFSBurnableRegistrar.sol",
    "exportedSymbols": {
      "FIFSBurnableRegistrar": [
        417
      ]
    },
    "id": 418,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 270,
        "literals": [
          "solidity",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:2"
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/interface/ApproveAndCallReceiver.sol",
        "file": "./interface/ApproveAndCallReceiver.sol",
        "id": 271,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 628,
        "src": "25:48:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/zeppelin/ERC20.sol",
        "file": "./zeppelin/ERC20.sol",
        "id": 272,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 3243,
        "src": "74:30:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/zeppelin/Ownable.sol",
        "file": "./zeppelin/Ownable.sol",
        "id": 273,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 3328,
        "src": "105:32:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/brett/Development/aragon/aragon-id/contracts/FIFSResolvingRegistrar.sol",
        "file": "./FIFSResolvingRegistrar.sol",
        "id": 274,
        "nodeType": "ImportDirective",
        "scope": 418,
        "sourceUnit": 556,
        "src": "138:38:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 275,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3327,
              "src": "417:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$3327",
                "typeString": "contract Ownable"
              }
            },
            "id": 276,
            "nodeType": "InheritanceSpecifier",
            "src": "417:7:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 277,
              "name": "ApproveAndCallReceiver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 627,
              "src": "426:22:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ApproveAndCallReceiver_$627",
                "typeString": "contract ApproveAndCallReceiver"
              }
            },
            "id": 278,
            "nodeType": "InheritanceSpecifier",
            "src": "426:22:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 279,
              "name": "FIFSResolvingRegistrar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 555,
              "src": "450:22:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FIFSResolvingRegistrar_$555",
                "typeString": "contract FIFSResolvingRegistrar"
              }
            },
            "id": 280,
            "nodeType": "InheritanceSpecifier",
            "src": "450:22:2"
          }
        ],
        "contractDependencies": [
          555,
          575,
          627,
          3327
        ],
        "contractKind": "contract",
        "documentation": "A registrar that allocates subdomains to the first person who claims them by burning the required\namount of tokens.\nNote: requires the token to support the `approveAndCall()` interface.",
        "fullyImplemented": true,
        "id": 417,
        "linearizedBaseContracts": [
          417,
          555,
          575,
          627,
          3327
        ],
        "name": "FIFSBurnableRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 282,
            "name": "burningToken",
            "nodeType": "VariableDeclaration",
            "scope": 417,
            "src": "479:25:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$3242",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 281,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3242,
              "src": "479:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$3242",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 284,
            "name": "registrationCost",
            "nodeType": "VariableDeclaration",
            "scope": 417,
            "src": "510:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 283,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "510:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 287,
            "name": "BURN_ADDRESS",
            "nodeType": "VariableDeclaration",
            "scope": 417,
            "src": "548:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 285,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "548:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307864656164",
              "id": 286,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "588:6:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_57005_by_1",
                "typeString": "int_const 57005"
              },
              "value": "0xdead"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 315,
              "nodeType": "Block",
              "src": "1214:87:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 307,
                      "name": "burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 282,
                      "src": "1224:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 308,
                      "name": "_burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 295,
                      "src": "1239:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "1224:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 310,
                  "nodeType": "ExpressionStatement",
                  "src": "1224:28:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 311,
                      "name": "registrationCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 284,
                      "src": "1262:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 312,
                      "name": "_startingCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 297,
                      "src": "1281:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1262:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 314,
                  "nodeType": "ExpressionStatement",
                  "src": "1262:32:2"
                }
              ]
            },
            "documentation": "Constructor.\n@param _ensAddr The address of the ENS registry.\n@param _resolver The address of the default resolver to use for subdomains.\n@param _node The node that this registrar administers.\n@param _burningToken The token to be burned for claiming addresses.\n@param _startingCost The initial cost of claiming an address.",
            "id": 316,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 300,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 299,
                  "name": "Ownable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3327,
                  "src": "1155:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Ownable_$3327_$",
                    "typeString": "type(contract Ownable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1155:7:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 302,
                    "name": "_ensAddr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 289,
                    "src": "1186:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractENS_$3407",
                      "typeString": "contract AbstractENS"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 303,
                    "name": "_resolver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 291,
                    "src": "1196:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPublicResolver_$613",
                      "typeString": "contract IPublicResolver"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 304,
                    "name": "_node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 293,
                    "src": "1207:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 305,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 301,
                  "name": "FIFSResolvingRegistrar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 555,
                  "src": "1163:22:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FIFSResolvingRegistrar_$555_$",
                    "typeString": "type(contract FIFSResolvingRegistrar)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1163:50:2"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 289,
                  "name": "_ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1003:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_AbstractENS_$3407",
                    "typeString": "contract AbstractENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 288,
                    "name": "AbstractENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3407,
                    "src": "1003:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_AbstractENS_$3407",
                      "typeString": "contract AbstractENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 291,
                  "name": "_resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1033:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPublicResolver_$613",
                    "typeString": "contract IPublicResolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 290,
                    "name": "IPublicResolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 613,
                    "src": "1033:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPublicResolver_$613",
                      "typeString": "contract IPublicResolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 293,
                  "name": "_node",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1068:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 292,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1068:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 295,
                  "name": "_burningToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1091:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$3242",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 294,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3242,
                    "src": "1091:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 297,
                  "name": "_startingCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1120:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 296,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1120:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "993:154:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1214:0:2"
            },
            "scope": 417,
            "src": "982:319:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 343,
              "nodeType": "Block",
              "src": "1981:225:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 328,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3422,
                            "src": "1999:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1999:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 331,
                              "name": "burningToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 282,
                              "src": "2021:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$3242",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$3242",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2013:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 332,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2013:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1999:35:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 327,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3425,
                        3426
                      ],
                      "referencedDeclaration": 3425,
                      "src": "1991:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1991:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 335,
                  "nodeType": "ExpressionStatement",
                  "src": "1991:44:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 339,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 324,
                            "src": "2192:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 337,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3461,
                            "src": "2182:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FIFSBurnableRegistrar_$417",
                              "typeString": "contract FIFSBurnableRegistrar"
                            }
                          },
                          "id": 338,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2182:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2182:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 336,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3425,
                        3426
                      ],
                      "referencedDeclaration": 3425,
                      "src": "2174:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2174:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 342,
                  "nodeType": "ExpressionStatement",
                  "src": "2174:25:2"
                }
              ]
            },
            "documentation": "`approveAndCall()` callback.\nExpects to register a subdomain via an external call to `register()` or\n`registerWithResolver()` if the `_amount` is greater than or equal to `registrationCost`.\nBurns `registrationCost` number of tokens from the sender.\n@param _from The address of the claimer.\n@param _amount The amount of tokens approved by the claimer.\n@param _token The address of the token (unused).\n@param _data An encoded call to `registerWithResolver()`.",
            "id": 344,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "receiveApproval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 318,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1911:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 317,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1911:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 320,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1926:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 319,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1926:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 322,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1943:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 321,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1943:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 324,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1959:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 323,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1959:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1910:61:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 326,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1981:0:2"
            },
            "scope": 417,
            "src": "1886:320:2",
            "stateMutability": "nonpayable",
            "superFunction": 626,
            "visibility": "external"
          },
          {
            "body": {
              "id": 359,
              "nodeType": "Block",
              "src": "2561:94:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 354,
                        "name": "_subnode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 346,
                        "src": "2614:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 355,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 348,
                        "src": "2624:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 356,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 430,
                        "src": "2632:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 351,
                        "name": "FIFSBurnableRegistrar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 417,
                        "src": "2571:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FIFSBurnableRegistrar_$417_$",
                          "typeString": "type(contract FIFSBurnableRegistrar)"
                        }
                      },
                      "id": 353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerWithResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 416,
                      "src": "2571:42:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IPublicResolver_$613_$returns$__$",
                        "typeString": "function (bytes32,address,contract IPublicResolver)"
                      }
                    },
                    "id": 357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2571:77:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 358,
                  "nodeType": "ExpressionStatement",
                  "src": "2571:77:2"
                }
              ]
            },
            "documentation": "Register a subdomain with the default resolver if it hasn't been claimed yet.\nOverwrites `FIFSResolvingRegistrar.register()`, to avoid polymorphism.\n@param _subnode The hash of the label to register.\n@param _owner The address of the new owner.",
            "id": 360,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "register",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 346,
                  "name": "_subnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 360,
                  "src": "2518:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 345,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2518:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 348,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 360,
                  "src": "2536:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 347,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2536:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2517:34:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2561:0:2"
            },
            "scope": 417,
            "src": "2500:155:2",
            "stateMutability": "nonpayable",
            "superFunction": 477,
            "visibility": "external"
          },
          {
            "body": {
              "id": 371,
              "nodeType": "Block",
              "src": "2827:45:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 367,
                      "name": "burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 282,
                      "src": "2837:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 368,
                      "name": "_burningToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 362,
                      "src": "2852:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$3242",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "2837:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 370,
                  "nodeType": "ExpressionStatement",
                  "src": "2837:28:2"
                }
              ]
            },
            "documentation": "Set the token to be burnt.\n@param _burningToken The token to be burnt.",
            "id": 372,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 365,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 364,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3301,
                  "src": "2817:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2817:9:2"
              }
            ],
            "name": "setBurningToken",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 362,
                  "name": "_burningToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 372,
                  "src": "2787:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$3242",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 361,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3242,
                    "src": "2787:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$3242",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2786:21:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 366,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2827:0:2"
            },
            "scope": 417,
            "src": "2762:110:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 383,
              "nodeType": "Block",
              "src": "3066:41:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 379,
                      "name": "registrationCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 284,
                      "src": "3076:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 380,
                      "name": "_cost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 374,
                      "src": "3095:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3076:24:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 382,
                  "nodeType": "ExpressionStatement",
                  "src": "3076:24:2"
                }
              ]
            },
            "documentation": "Set registration cost (in tokens) for claiming a subdomain.\n@param _cost The cost (in tokens).",
            "id": 384,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 377,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 376,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3301,
                  "src": "3056:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3056:9:2"
              }
            ],
            "name": "setRegistrationCost",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 374,
                  "name": "_cost",
                  "nodeType": "VariableDeclaration",
                  "scope": 384,
                  "src": "3032:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 373,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3032:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3031:15:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3066:0:2"
            },
            "scope": 417,
            "src": "3003:104:2",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 415,
              "nodeType": "Block",
              "src": "3578:247:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 396,
                        "name": "_subnode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 386,
                        "src": "3632:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 397,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 388,
                        "src": "3642:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 398,
                        "name": "_resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 390,
                        "src": "3650:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_contract$_IPublicResolver_$613",
                          "typeString": "contract IPublicResolver"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 393,
                        "name": "FIFSResolvingRegistrar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "3588:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FIFSResolvingRegistrar_$555_$",
                          "typeString": "type(contract FIFSResolvingRegistrar)"
                        }
                      },
                      "id": 395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerWithResolver",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 554,
                      "src": "3588:43:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_contract$_IPublicResolver_$613_$returns$__$",
                        "typeString": "function (bytes32,address,contract IPublicResolver)"
                      }
                    },
                    "id": 399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3588:72:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 400,
                  "nodeType": "ExpressionStatement",
                  "src": "3588:72:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 401,
                      "name": "registrationCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 284,
                      "src": "3698:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3717:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3698:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 414,
                  "nodeType": "IfStatement",
                  "src": "3694:125:2",
                  "trueBody": {
                    "id": 413,
                    "nodeType": "Block",
                    "src": "3720:99:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 407,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 388,
                                  "src": "3768:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 408,
                                  "name": "BURN_ADDRESS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 287,
                                  "src": "3776:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 409,
                                  "name": "registrationCost",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 284,
                                  "src": "3790:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 405,
                                  "name": "burningToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 282,
                                  "src": "3742:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$3242",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 406,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transferFrom",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3224,
                                "src": "3742:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint256) external returns (bool)"
                                }
                              },
                              "id": 410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3742:65:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 404,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3425,
                              3426
                            ],
                            "referencedDeclaration": 3425,
                            "src": "3734:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3734:74:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 412,
                        "nodeType": "ExpressionStatement",
                        "src": "3734:74:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "Register a subdomain if it hasn't been claimed yet.\nRequires the _owner to have approved at least the amount of the requiredCost to this\ncontract for the burningToken.\n@param _subnode The hash of the label to register.\n@param _owner The address of the new owner.\n@param _resolver The address of the resolver.",
            "id": 416,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "registerWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 391,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 386,
                  "name": "_subnode",
                  "nodeType": "VariableDeclaration",
                  "scope": 416,
                  "src": "3510:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 385,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3510:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 388,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 416,
                  "src": "3528:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 387,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3528:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 390,
                  "name": "_resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 416,
                  "src": "3544:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPublicResolver_$613",
                    "typeString": "contract IPublicResolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 389,
                    "name": "IPublicResolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 613,
                    "src": "3544:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPublicResolver_$613",
                      "typeString": "contract IPublicResolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3509:61:2"
            },
            "payable": false,
            "returnParameters": {
              "id": 392,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3578:0:2"
            },
            "scope": 417,
            "src": "3480:345:2",
            "stateMutability": "nonpayable",
            "superFunction": 554,
            "visibility": "public"
          }
        ],
        "scope": 418,
        "src": "383:3444:2"
      }
    ],
    "src": "0:3828:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2020-01-30T18:28:02.810Z"
}