{
  "contractName": "SHA1NSEC3Digest",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "salt",
          "type": "bytes"
        },
        {
          "name": "data",
          "type": "bytes"
        },
        {
          "name": "iterations",
          "type": "uint256"
        }
      ],
      "name": "hash",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50610af1806100206000396000f3fe608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806368f9dab214610046575b600080fd5b34801561005257600080fd5b506101296004803603606081101561006957600080fd5b810190808035906020019064010000000081111561008657600080fd5b82018360208201111561009857600080fd5b803590602001918460018302840111640100000000831117156100ba57600080fd5b9091929391929390803590602001906401000000008111156100db57600080fd5b8201836020820111156100ed57600080fd5b8035906020019184600183028401116401000000008311171561010f57600080fd5b90919293919293908035906020019092919050505061013f565b6040518082815260200191505060405180910390f35b6000610149610aab565b6101676010868690508989905001018261031890919063ffffffff16565b506101bf85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508261036f90919063ffffffff16565b5061021787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508261036f90919063ffffffff16565b5060006102278260000151610391565b905060008411156102fb5761023b826108b2565b5061025f60006c0100000000000000000000000002836108c990919063ffffffff16565b506102b788888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508361036f90919063ffffffff16565b5060008090505b848110156102f9576102dc600083856108fa9092919063ffffffff16565b506102ea8360000151610391565b915080806001019150506102be565b505b806bffffffffffffffffffffffff19169250505095945050505050565b610320610aab565b600060208381151561032e57fe5b0614151561034b5760208281151561034257fe5b06602003820191505b81836020018181525050604051808452600081528281016040525082905092915050565b610377610aab565b61038983846000015151848551610927565b905092915050565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181146103c2576103c9565b6040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610424565b60008090508383101561041d578282015190508284039350602084101561041c576001846020036101000a03198082169150505b5b9392505050565b60005b828110156108325761043a8482896103e8565b855261044a8460208301896103e8565b6020860152604081850310600181146104625761046b565b60808286038701535b506040830381146001811461047f5761048f565b6008850260208701511760208701525b5060405b608081101561051b5760408103860151603882038701511860208203870151600c830388015118187c010000000100000001000000010000000100000001000000010000000163800000008204167ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe6002830216179050808288015250600c81019050610493565b5060805b6101408110156105a857608081038601516070820387015118604082038701516018830388015118187c030000000300000003000000030000000300000003000000030000000363400000008204167ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc600483021617905080828801525060188101905061051f565b508160008060005b60508110156108045760148104600081146105e2576001811461062c576002811461066957600381146106cc57610705565b6501000000000085046a01000000000000000000008604189350836f01000000000000000000000000000000860416935083650100000000008604189350635a8279999250610705565b6a010000000000000000000085046f01000000000000000000000000000000860418935083650100000000008604189350636ed9eba19250610705565b6a010000000000000000000085046f01000000000000000000000000000000860417935083650100000000008604169350836a010000000000000000000086046f01000000000000000000000000000000870416179350638f1bbcdc9250610705565b6a010000000000000000000085046f0100000000000000000000000000000086041893508365010000000000860418935063ca62c1d692505b50601f770800000000000000000000000000000000000000000000008504168063ffffffe073080000000000000000000000000000000000000087041617905080840190508063ffffffff86160190508083019050807c0100000000000000000000000000000000000000000000000000000000600484028c0151040190507401000000000000000000000000000000000000000081026501000000000086041794506a0100000000000000000000633fffffff6a040000000000000000000087041663c00000006604000000000000880416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8616179450506001810190506105b0565b5077ffffffff00ffffffff00ffffffff00ffffffff00ffffffff838601169450505050604081019050610427565b506c0100000000000000000000000063ffffffff821667ffffffff000000006101008404166bffffffff0000000000000000620100008504166fffffffff000000000000000000000000630100000086041673ffffffff000000000000000000000000000000006401000000008704161717171702945050505050919050565b6108ba610aab565b81516000815250819050919050565b6108d1610aab565b6108f283846000015151846bffffffffffffffffffffffff191660146109eb565b905092915050565b610902610aab565b61091e8484846bffffffffffffffffffffffff191660146109eb565b90509392505050565b61092f610aab565b8251821115151561093f57600080fd5b84602001518560000151518386010111156109715761097085600261096a8860200151888701610a6b565b02610a87565b5b6000808651805187602083010193508088870111156109905787860182525b60208701925050505b6020841015156109be5780518252602082019150602081019050602084039350610999565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b6109f3610aab565b84602001518483011115610a1c57610a1b856002610a15886020015186610a6b565b02610a87565b5b60006001836101000a0390508260200360080284908060020a820491505093508551838682010185831982511617815281518588011115610a5d5784870182525b505085915050949350505050565b600081831115610a7d57829050610a81565b8190505b92915050565b606082600001519050610a9a8383610318565b50610aa5838261036f565b50505050565b60408051908101604052806060815260200160008152509056fea165627a7a7230582040f5f97d752319eb76f8edb13efd13d3ce9e74a0dab886e507ab83e6d61642e40029",
  "deployedBytecode": "0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806368f9dab214610046575b600080fd5b34801561005257600080fd5b506101296004803603606081101561006957600080fd5b810190808035906020019064010000000081111561008657600080fd5b82018360208201111561009857600080fd5b803590602001918460018302840111640100000000831117156100ba57600080fd5b9091929391929390803590602001906401000000008111156100db57600080fd5b8201836020820111156100ed57600080fd5b8035906020019184600183028401116401000000008311171561010f57600080fd5b90919293919293908035906020019092919050505061013f565b6040518082815260200191505060405180910390f35b6000610149610aab565b6101676010868690508989905001018261031890919063ffffffff16565b506101bf85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508261036f90919063ffffffff16565b5061021787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508261036f90919063ffffffff16565b5060006102278260000151610391565b905060008411156102fb5761023b826108b2565b5061025f60006c0100000000000000000000000002836108c990919063ffffffff16565b506102b788888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508361036f90919063ffffffff16565b5060008090505b848110156102f9576102dc600083856108fa9092919063ffffffff16565b506102ea8360000151610391565b915080806001019150506102be565b505b806bffffffffffffffffffffffff19169250505095945050505050565b610320610aab565b600060208381151561032e57fe5b0614151561034b5760208281151561034257fe5b06602003820191505b81836020018181525050604051808452600081528281016040525082905092915050565b610377610aab565b61038983846000015151848551610927565b905092915050565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181146103c2576103c9565b6040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610424565b60008090508383101561041d578282015190508284039350602084101561041c576001846020036101000a03198082169150505b5b9392505050565b60005b828110156108325761043a8482896103e8565b855261044a8460208301896103e8565b6020860152604081850310600181146104625761046b565b60808286038701535b506040830381146001811461047f5761048f565b6008850260208701511760208701525b5060405b608081101561051b5760408103860151603882038701511860208203870151600c830388015118187c010000000100000001000000010000000100000001000000010000000163800000008204167ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe6002830216179050808288015250600c81019050610493565b5060805b6101408110156105a857608081038601516070820387015118604082038701516018830388015118187c030000000300000003000000030000000300000003000000030000000363400000008204167ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc600483021617905080828801525060188101905061051f565b508160008060005b60508110156108045760148104600081146105e2576001811461062c576002811461066957600381146106cc57610705565b6501000000000085046a01000000000000000000008604189350836f01000000000000000000000000000000860416935083650100000000008604189350635a8279999250610705565b6a010000000000000000000085046f01000000000000000000000000000000860418935083650100000000008604189350636ed9eba19250610705565b6a010000000000000000000085046f01000000000000000000000000000000860417935083650100000000008604169350836a010000000000000000000086046f01000000000000000000000000000000870416179350638f1bbcdc9250610705565b6a010000000000000000000085046f0100000000000000000000000000000086041893508365010000000000860418935063ca62c1d692505b50601f770800000000000000000000000000000000000000000000008504168063ffffffe073080000000000000000000000000000000000000087041617905080840190508063ffffffff86160190508083019050807c0100000000000000000000000000000000000000000000000000000000600484028c0151040190507401000000000000000000000000000000000000000081026501000000000086041794506a0100000000000000000000633fffffff6a040000000000000000000087041663c00000006604000000000000880416170277ffffffff00ffffffff000000000000ffffffff00ffffffff8616179450506001810190506105b0565b5077ffffffff00ffffffff00ffffffff00ffffffff00ffffffff838601169450505050604081019050610427565b506c0100000000000000000000000063ffffffff821667ffffffff000000006101008404166bffffffff0000000000000000620100008504166fffffffff000000000000000000000000630100000086041673ffffffff000000000000000000000000000000006401000000008704161717171702945050505050919050565b6108ba610aab565b81516000815250819050919050565b6108d1610aab565b6108f283846000015151846bffffffffffffffffffffffff191660146109eb565b905092915050565b610902610aab565b61091e8484846bffffffffffffffffffffffff191660146109eb565b90509392505050565b61092f610aab565b8251821115151561093f57600080fd5b84602001518560000151518386010111156109715761097085600261096a8860200151888701610a6b565b02610a87565b5b6000808651805187602083010193508088870111156109905787860182525b60208701925050505b6020841015156109be5780518252602082019150602081019050602084039350610999565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b6109f3610aab565b84602001518483011115610a1c57610a1b856002610a15886020015186610a6b565b02610a87565b5b60006001836101000a0390508260200360080284908060020a820491505093508551838682010185831982511617815281518588011115610a5d5784870182525b505085915050949350505050565b600081831115610a7d57829050610a81565b8190505b92915050565b606082600001519050610a9a8383610318565b50610aa5838261036f565b50505050565b60408051908101604052806060815260200160008152509056fea165627a7a7230582040f5f97d752319eb76f8edb13efd13d3ce9e74a0dab886e507ab83e6d61642e40029",
  "sourceMap": "235:690:17:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;235:690:17;;;;;;;",
  "deployedSourceMap": "235:690:17:-;;;;;;;;;;;;;;;;;;;;;;;;318:605;;8:9:-1;5:2;;;30:1;27;20:12;5:2;318:605:17;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;318:605:17;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;318:605:17;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;318:605:17;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;318:605:17;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;318:605:17;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;318:605:17;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;318:605:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;414:7;433:24;;:::i;:::-;467:40;504:2;490:4;;:11;;476:4;;:11;;:25;:30;467:3;:8;;:40;;;;:::i;:::-;;518:16;529:4;;518:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;518:16:17;;;;;;:3;:10;;:16;;;;:::i;:::-;;544;555:4;;544:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;544:16:17;;;;;;:3;:10;;:16;;;;:::i;:::-;;570:9;582:18;592:3;:7;;;582:9;:18::i;:::-;570:30;;627:1;614:10;:14;610:279;;;644:14;:3;:12;:14::i;:::-;;672:29;698:1;690:10;;672:3;:17;;:29;;;;:::i;:::-;;715:16;726:4;;715:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;715:16:17;;;;;;:3;:10;;:16;;;;:::i;:::-;;751:6;760:1;751:10;;746:133;767:10;763:1;:14;746:133;;;802:22;819:1;822;802:3;:16;;:22;;;;;:::i;:::-;;846:18;856:3;:7;;;846:9;:18::i;:::-;842:22;;779:3;;;;;;;746:133;;;;610:279;914:1;906:10;;;899:17;;;;318:605;;;;;;;:::o;978:446:18:-;1048:13;;:::i;:::-;1094:1;1088:2;1077:8;:13;;;;;;;;:18;;1073:81;;;1140:2;1129:8;:13;;;;;;;;1123:2;:20;1111:32;;;;1073:81;1224:8;1209:3;:12;;:23;;;;;1282:4;1276:11;1312:3;1307;1300:16;1341:1;1336:3;1329:14;1378:8;1373:3;1369:18;1363:4;1356:32;1251:147;1414:3;1407:10;;978:446;;;;:::o;4954:161::-;5031:13;;:::i;:::-;5063:45;5069:3;5074;:7;;;:14;5090:4;5096;:11;5063:5;:45::i;:::-;5056:52;;4954:161;;;;:::o;74:5661:19:-;129:11;239:4;233:11;344:4;338:11;380:2;374:4;370:13;362:21;;500:2;479:18;475:1;470:3;466:11;462:36;458:45;546:1;540:3;530:8;526:18;523:25;566:1;561:40;;;;516:85;;561:40;596:2;586:8;582:17;570:29;;516:85;;624:50;688:425;;;;761:1;751:11;;790:5;785:3;782:14;779:2;;;844:3;839;835:13;829:20;819:30;;890:3;883:5;879:15;870:24;;928:2;921:5;918:13;915:2;;;1004:1;995:5;991:2;987:14;982:3;978:24;974:32;970:37;1054:4;1046:6;1042:17;1032:27;;932:149;915:2;779;733:380;;;;;;;1142:1;1127:4284;1152:8;1149:1;1146:15;1127:4284;;;1216:22;1234:3;1231:1;1225:4;1216:22;;;1207:7;1200:39;1281:31;1308:3;1303:2;1300:1;1296:10;1290:4;1281:31;;;1276:2;1267:7;1263:16;1256:57;1427:2;1423:1;1418:3;1414:11;1411:19;1452:1;1447:51;;;;1404:94;;1447:51;1491:4;1486:1;1481:3;1477:11;1468:7;1464:25;1456:40;1404:94;;1606:2;1596:8;1592:17;1589:1;1586:24;1632:1;1627:77;;;;1579:125;;1627:77;1698:1;1693:3;1689:11;1683:2;1674:7;1670:16;1664:23;1661:40;1656:2;1647:7;1643:16;1636:66;1579:125;;1791:2;1776:512;1802:3;1799:1;1796:10;1776:512;;;1999:2;1996:1;1992:10;1983:7;1979:24;1973:31;1966:2;1963:1;1959:10;1950:7;1946:24;1940:31;1936:69;1928:2;1925:1;1921:10;1912:7;1908:24;1902:31;1895:2;1892:1;1888:10;1879:7;1875:24;1869:31;1865:69;1861:145;2152:66;2139:10;2133:4;2129:21;2125:94;2056:66;2052:1;2046:4;2042:12;2038:85;2035:185;2027:193;;2265:4;2261:1;2252:7;2248:15;2241:29;1827:461;1821:2;1818:1;1814:10;1809:15;;1776:512;;;1780:15;2320:3;2305:515;2332:3;2329:1;2326:10;2305:515;;;2530:3;2527:1;2523:11;2514:7;2510:25;2504:32;2496:3;2493:1;2489:11;2480:7;2476:25;2470:32;2466:71;2458:2;2455:1;2451:10;2442:7;2438:24;2432:31;2425:2;2422:1;2418:10;2409:7;2405:24;2399:31;2395:69;2391:147;2684:66;2671:10;2665:4;2661:21;2657:94;2588:66;2584:1;2578:4;2574:12;2570:85;2567:185;2559:193;;2797:4;2793:1;2784:7;2780:15;2773:29;2357:463;2351:2;2348:1;2344:10;2339:15;;2305:515;;;2309:16;2847:1;2874;2901;2934;2919:2389;2944:2;2941:1;2938:9;2919:2389;;;3003:2;3000:1;2996:10;3032:1;3027:352;;;;3405:1;3400:282;;;;3708:1;3703:414;;;;4143:1;4138:283;;;;2989:1432;;3027:352;3164:13;3161:1;3157:21;3131:23;3128:1;3124:31;3120:59;3115:64;;3256:1;3220:33;3217:1;3213:41;3209:49;3204:54;;3315:1;3299:13;3296:1;3292:21;3288:29;3283:34;;3347:10;3342:15;;3027:352;;3400:282;3536:23;3533:1;3529:31;3493:33;3490:1;3486:41;3482:79;3477:84;;3618:1;3602:13;3599:1;3595:21;3591:29;3586:34;;3650:10;3645:15;;3400:282;;3703:414;3855:23;3852:1;3848:31;3812:33;3809:1;3805:41;3802:78;3797:83;;3937:1;3921:13;3918:1;3914:21;3910:29;3905:34;;4053:1;4026:23;4023:1;4019:31;3983:33;3980:1;3976:41;3972:79;3969:86;3964:91;;4085:10;4080:15;;3703:414;;4138:283;4275:23;4272:1;4268:31;4232:33;4229:1;4225:41;4221:79;4216:84;;4357:1;4341:13;4338:1;4334:21;4330:29;4325:34;;4389:10;4384:15;;2989:1432;;4583:4;4531:49;4528:1;4524:57;4520:68;4688:4;4675:10;4631:41;4628:1;4624:49;4620:66;4617:76;4609:84;;4729:4;4726:1;4722:12;4714:20;;4787:4;4774:10;4771:1;4767:18;4763:29;4755:37;;4828:4;4825:1;4821:12;4813:20;;4964:4;4902:59;4896:1;4893;4889:9;4880:7;4876:23;4870:30;4866:96;4862:107;4854:115;;5031:43;5025:4;5021:54;5005:13;5002:1;4998:21;4995:81;4990:86;;5265:23;5251:10;5225:23;5222:1;5218:31;5214:48;5201:10;5183:15;5180:1;5176:23;5172:40;5169:94;5165:124;5112:50;5109:1;5105:58;5102:188;5097:193;;2967:2341;2962:1;2959;2955:9;2950:14;;2919:2389;;;2923:14;5346:50;5342:1;5339;5335:9;5331:66;5326:71;;1182:4229;;;1176:2;1173:1;1169:10;1164:15;;1127:4284;;;1131:14;5691:27;5677:10;5674:1;5670:18;5648;5640:5;5637:1;5633:13;5629:38;5599:26;5589:7;5586:1;5582:15;5578:48;5540:34;5528:9;5525:1;5521:17;5517:58;5472:42;5458:11;5455:1;5451:19;5447:68;5444:132;5441:186;5438:230;5435:254;5431:288;5424:295;;161:5568;;;;;;;:::o;2308:198:18:-;2368:13;;:::i;:::-;2436:3;2430:10;2468:1;2460:6;2453:17;2402:78;2496:3;2489:10;;2308:198;;;:::o;8471:163::-;8550:13;;:::i;:::-;8582:45;8588:3;8593;:7;;;:14;8617:4;8609:13;;;8624:2;8582:5;:45::i;:::-;8575:52;;8471:163;;;;:::o;8043:161::-;8131:13;;:::i;:::-;8163:34;8169:3;8174;8187:4;8179:13;;;8194:2;8163:5;:34::i;:::-;8156:41;;8043:161;;;;;:::o;2866:1343::-;2961:13;;:::i;:::-;3001:4;:11;2994:3;:18;;2986:27;;;;;;;;3057:3;:12;;;3040:3;:7;;;:14;3034:3;3028;:9;:26;:41;3024:117;;;3085:45;3092:3;3128:1;3097:28;3101:3;:12;;;3121:3;3115;:9;3097:3;:28::i;:::-;:32;3085:6;:45::i;:::-;3024:117;3151:9;3170:8;3280:3;3274:10;3363:6;3357:13;3491:3;3486:2;3478:6;3474:15;3470:25;3462:33;;3587:6;3581:3;3576;3572:13;3569:25;3566:2;;;3637:3;3632;3628:13;3620:6;3613:29;3566:2;3686;3680:4;3676:13;3669:20;;3197:502;;3759:165;3773:2;3766:3;:9;;3759:165;;;3848:3;3842:10;3836:4;3829:24;3888:2;3880:10;;;;3911:2;3904:9;;;;3784:2;3777:9;;;;3759:165;;;3966:9;3998:1;3991:3;3986:2;:8;3978:3;:17;:21;3966:33;;4067:4;4063:9;4057:3;4051:10;4047:26;4119:4;4112;4106:11;4102:22;4163:7;4153:8;4150:21;4144:4;4137:35;4018:164;;4199:3;4192:10;;;;;2866:1343;;;;;;:::o;6927:810::-;7016:13;;:::i;:::-;7057:3;:12;;;7051:3;7045;:9;:24;7041:94;;;7085:39;7092:3;7122:1;7097:22;7101:3;:12;;;7115:3;7097;:22::i;:::-;:26;7085:6;:39::i;:::-;7041:94;7145:9;7170:1;7164:3;7157;:10;:14;7145:26;;7235:3;7230:2;:8;7225:1;:14;7216:4;:24;52:12:-1;49:1;45:20;29:14;25:41;7:59;;7216:24:18;7209:31;;7342:3;7336:10;7469:3;7463;7455:6;7451:16;7447:26;7531:4;7523;7519:9;7512:4;7506:11;7502:27;7499:37;7493:4;7486:51;7631:6;7625:13;7619:3;7614;7610:13;7607:32;7604:2;;;7682:3;7677;7673:13;7665:6;7658:29;7604:2;7259:452;;7727:3;7720:10;;;6927:810;;;;;;:::o;2026:134::-;2076:4;2100:1;2096;:5;2092:44;;;2124:1;2117:8;;;;2092:44;2152:1;2145:8;;2026:134;;;;;:::o;1853:167::-;1926:19;1948:3;:7;;;1926:29;;1965:19;1970:3;1975:8;1965:4;:19::i;:::-;;1994;2001:3;2006:6;1994;:19::i;:::-;;1853:167;;;:::o;235:690:17:-;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity >0.4.23;\n\nimport \"./NSEC3Digest.sol\";\nimport \"@ensdomains/solsha1/contracts/SHA1.sol\";\nimport \"@ensdomains/buffer/contracts/Buffer.sol\";\n\n/**\n* @dev Implements the DNSSEC iterated SHA1 digest used for NSEC3 records.\n*/\ncontract SHA1NSEC3Digest is NSEC3Digest {\n    using Buffer for Buffer.buffer;\n\n    function hash(bytes calldata salt, bytes calldata data, uint iterations) external pure returns (bytes32) {\n        Buffer.buffer memory buf;\n        buf.init(salt.length + data.length + 16);\n\n        buf.append(data);\n        buf.append(salt);\n        bytes20 h = SHA1.sha1(buf.buf);\n        if (iterations > 0) {\n            buf.truncate();\n            buf.appendBytes20(bytes20(0));\n            buf.append(salt);\n\n            for (uint i = 0; i < iterations; i++) {\n                buf.writeBytes20(0, h);\n                h = SHA1.sha1(buf.buf);\n            }\n        }\n\n        return bytes32(h);\n    }\n}\n",
  "sourcePath": "/home/user/Dropbox/projects/enssec/contracts/nsec3digests/SHA1NSEC3Digest.sol",
  "ast": {
    "absolutePath": "/home/user/Dropbox/projects/enssec/contracts/nsec3digests/SHA1NSEC3Digest.sol",
    "exportedSymbols": {
      "SHA1NSEC3Digest": [
        3750
      ]
    },
    "id": 3751,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3637,
        "literals": [
          "solidity",
          ">",
          "0.4",
          ".23"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:17"
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/enssec/contracts/nsec3digests/NSEC3Digest.sol",
        "file": "./NSEC3Digest.sol",
        "id": 3638,
        "nodeType": "ImportDirective",
        "scope": 3751,
        "sourceUnit": 3636,
        "src": "26:27:17",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/solsha1/contracts/SHA1.sol",
        "file": "@ensdomains/solsha1/contracts/SHA1.sol",
        "id": 3639,
        "nodeType": "ImportDirective",
        "scope": 3751,
        "sourceUnit": 4225,
        "src": "54:48:17",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/buffer/contracts/Buffer.sol",
        "file": "@ensdomains/buffer/contracts/Buffer.sol",
        "id": 3640,
        "nodeType": "ImportDirective",
        "scope": 3751,
        "sourceUnit": 4209,
        "src": "103:49:17",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3641,
              "name": "NSEC3Digest",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3635,
              "src": "263:11:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NSEC3Digest_$3635",
                "typeString": "contract NSEC3Digest"
              }
            },
            "id": 3642,
            "nodeType": "InheritanceSpecifier",
            "src": "263:11:17"
          }
        ],
        "contractDependencies": [
          3635
        ],
        "contractKind": "contract",
        "documentation": "@dev Implements the DNSSEC iterated SHA1 digest used for NSEC3 records.",
        "fullyImplemented": true,
        "id": 3750,
        "linearizedBaseContracts": [
          3750,
          3635
        ],
        "name": "SHA1NSEC3Digest",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3645,
            "libraryName": {
              "contractScope": null,
              "id": 3643,
              "name": "Buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4208,
              "src": "287:6:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Buffer_$4208",
                "typeString": "library Buffer"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "281:31:17",
            "typeName": {
              "contractScope": null,
              "id": 3644,
              "name": "Buffer.buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3757,
              "src": "298:13:17",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_buffer_$3757_storage_ptr",
                "typeString": "struct Buffer.buffer"
              }
            }
          },
          {
            "body": {
              "id": 3748,
              "nodeType": "Block",
              "src": "423:500:17",
              "statements": [
                {
                  "assignments": [
                    3659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3659,
                      "name": "buf",
                      "nodeType": "VariableDeclaration",
                      "scope": 3748,
                      "src": "433:24:17",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                        "typeString": "struct Buffer.buffer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3658,
                        "name": "Buffer.buffer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3757,
                        "src": "433:13:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_storage_ptr",
                          "typeString": "struct Buffer.buffer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3660,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "433:24:17"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3664,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3647,
                              "src": "476:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            "id": 3665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "476:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3666,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3649,
                              "src": "490:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            "id": 3667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "490:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "476:25:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3136",
                          "id": 3669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "504:2:17",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_16_by_1",
                            "typeString": "int_const 16"
                          },
                          "value": "16"
                        },
                        "src": "476:30:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3661,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3659,
                        "src": "467:3:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                          "typeString": "struct Buffer.buffer memory"
                        }
                      },
                      "id": 3663,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3792,
                      "src": "467:8:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                        "typeString": "function (struct Buffer.buffer memory,uint256) pure returns (struct Buffer.buffer memory)"
                      }
                    },
                    "id": 3671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "467:40:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                      "typeString": "struct Buffer.buffer memory"
                    }
                  },
                  "id": 3672,
                  "nodeType": "ExpressionStatement",
                  "src": "467:40:17"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3676,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3649,
                        "src": "529:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3673,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3659,
                        "src": "518:3:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                          "typeString": "struct Buffer.buffer memory"
                        }
                      },
                      "id": 3675,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "append",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3997,
                      "src": "518:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                        "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                      }
                    },
                    "id": 3677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "518:16:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                      "typeString": "struct Buffer.buffer memory"
                    }
                  },
                  "id": 3678,
                  "nodeType": "ExpressionStatement",
                  "src": "518:16:17"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3682,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3647,
                        "src": "555:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3679,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3659,
                        "src": "544:3:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                          "typeString": "struct Buffer.buffer memory"
                        }
                      },
                      "id": 3681,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "append",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3997,
                      "src": "544:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                        "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                      }
                    },
                    "id": 3683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "544:16:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                      "typeString": "struct Buffer.buffer memory"
                    }
                  },
                  "id": 3684,
                  "nodeType": "ExpressionStatement",
                  "src": "544:16:17"
                },
                {
                  "assignments": [
                    3686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3686,
                      "name": "h",
                      "nodeType": "VariableDeclaration",
                      "scope": 3748,
                      "src": "570:9:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 3685,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "570:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3692,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3689,
                          "name": "buf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3659,
                          "src": "592:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3690,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "buf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3754,
                        "src": "592:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3687,
                        "name": "SHA1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4224,
                        "src": "582:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SHA1_$4224_$",
                          "typeString": "type(library SHA1)"
                        }
                      },
                      "id": 3688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sha1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4223,
                      "src": "582:9:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                        "typeString": "function (bytes memory) pure returns (bytes20)"
                      }
                    },
                    "id": 3691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "582:18:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "570:30:17"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3693,
                      "name": "iterations",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3651,
                      "src": "614:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3694,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "627:1:17",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "614:14:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3743,
                  "nodeType": "IfStatement",
                  "src": "610:279:17",
                  "trueBody": {
                    "id": 3742,
                    "nodeType": "Block",
                    "src": "630:259:17",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3696,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3659,
                              "src": "644:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 3698,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "truncate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3871,
                            "src": "644:12:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 3699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "644:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3700,
                        "nodeType": "ExpressionStatement",
                        "src": "644:14:17"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3705,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "698:1:17",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "690:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes20_$",
                                  "typeString": "type(bytes20)"
                                },
                                "typeName": "bytes20"
                              },
                              "id": 3706,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "690:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes20",
                                "typeString": "bytes20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes20",
                                "typeString": "bytes20"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3701,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3659,
                              "src": "672:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 3703,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "appendBytes20",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4142,
                            "src": "672:17:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes20_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes20) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 3707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "672:29:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3708,
                        "nodeType": "ExpressionStatement",
                        "src": "672:29:17"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3712,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3647,
                              "src": "726:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3709,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3659,
                              "src": "715:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 3711,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3997,
                            "src": "715:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 3713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "715:16:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3714,
                        "nodeType": "ExpressionStatement",
                        "src": "715:16:17"
                      },
                      {
                        "body": {
                          "id": 3740,
                          "nodeType": "Block",
                          "src": "784:95:17",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3728,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "819:1:17",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3729,
                                    "name": "h",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3686,
                                    "src": "822:1:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3725,
                                    "name": "buf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3659,
                                    "src": "802:3:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                      "typeString": "struct Buffer.buffer memory"
                                    }
                                  },
                                  "id": 3727,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "writeBytes20",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4121,
                                  "src": "802:16:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_uint256_$_t_bytes20_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                                    "typeString": "function (struct Buffer.buffer memory,uint256,bytes20) pure returns (struct Buffer.buffer memory)"
                                  }
                                },
                                "id": 3730,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "802:22:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                  "typeString": "struct Buffer.buffer memory"
                                }
                              },
                              "id": 3731,
                              "nodeType": "ExpressionStatement",
                              "src": "802:22:17"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3732,
                                  "name": "h",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3686,
                                  "src": "842:1:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 3735,
                                        "name": "buf",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3659,
                                        "src": "856:3:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                          "typeString": "struct Buffer.buffer memory"
                                        }
                                      },
                                      "id": 3736,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "buf",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3754,
                                      "src": "856:7:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3733,
                                      "name": "SHA1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4224,
                                      "src": "846:4:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SHA1_$4224_$",
                                        "typeString": "type(library SHA1)"
                                      }
                                    },
                                    "id": 3734,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sha1",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4223,
                                    "src": "846:9:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                                      "typeString": "function (bytes memory) pure returns (bytes20)"
                                    }
                                  },
                                  "id": 3737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "846:18:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                },
                                "src": "842:22:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                }
                              },
                              "id": 3739,
                              "nodeType": "ExpressionStatement",
                              "src": "842:22:17"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3719,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3716,
                            "src": "763:1:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3720,
                            "name": "iterations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3651,
                            "src": "767:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "763:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3741,
                        "initializationExpression": {
                          "assignments": [
                            3716
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3716,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 3741,
                              "src": "751:6:17",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3715,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "751:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 3718,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "760:1:17",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "751:10:17"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 3723,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "779:3:17",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 3722,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3716,
                              "src": "779:1:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3724,
                          "nodeType": "ExpressionStatement",
                          "src": "779:3:17"
                        },
                        "nodeType": "ForStatement",
                        "src": "746:133:17"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3745,
                        "name": "h",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3686,
                        "src": "914:1:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      ],
                      "id": 3744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "906:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": "bytes32"
                    },
                    "id": 3746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "906:10:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3655,
                  "id": 3747,
                  "nodeType": "Return",
                  "src": "899:17:17"
                }
              ]
            },
            "documentation": null,
            "id": 3749,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3652,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3647,
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "332:19:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3646,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "332:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3649,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "353:19:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3648,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "353:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3651,
                  "name": "iterations",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "374:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3650,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "374:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "331:59:17"
            },
            "returnParameters": {
              "id": 3655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3654,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "414:7:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3653,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "414:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "413:9:17"
            },
            "scope": 3750,
            "src": "318:605:17",
            "stateMutability": "pure",
            "superFunction": 3634,
            "visibility": "external"
          }
        ],
        "scope": 3751,
        "src": "235:690:17"
      }
    ],
    "src": "0:926:17"
  },
  "legacyAST": {
    "absolutePath": "/home/user/Dropbox/projects/enssec/contracts/nsec3digests/SHA1NSEC3Digest.sol",
    "exportedSymbols": {
      "SHA1NSEC3Digest": [
        3750
      ]
    },
    "id": 3751,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3637,
        "literals": [
          "solidity",
          ">",
          "0.4",
          ".23"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:17"
      },
      {
        "absolutePath": "/home/user/Dropbox/projects/enssec/contracts/nsec3digests/NSEC3Digest.sol",
        "file": "./NSEC3Digest.sol",
        "id": 3638,
        "nodeType": "ImportDirective",
        "scope": 3751,
        "sourceUnit": 3636,
        "src": "26:27:17",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/solsha1/contracts/SHA1.sol",
        "file": "@ensdomains/solsha1/contracts/SHA1.sol",
        "id": 3639,
        "nodeType": "ImportDirective",
        "scope": 3751,
        "sourceUnit": 4225,
        "src": "54:48:17",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/buffer/contracts/Buffer.sol",
        "file": "@ensdomains/buffer/contracts/Buffer.sol",
        "id": 3640,
        "nodeType": "ImportDirective",
        "scope": 3751,
        "sourceUnit": 4209,
        "src": "103:49:17",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 3641,
              "name": "NSEC3Digest",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3635,
              "src": "263:11:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NSEC3Digest_$3635",
                "typeString": "contract NSEC3Digest"
              }
            },
            "id": 3642,
            "nodeType": "InheritanceSpecifier",
            "src": "263:11:17"
          }
        ],
        "contractDependencies": [
          3635
        ],
        "contractKind": "contract",
        "documentation": "@dev Implements the DNSSEC iterated SHA1 digest used for NSEC3 records.",
        "fullyImplemented": true,
        "id": 3750,
        "linearizedBaseContracts": [
          3750,
          3635
        ],
        "name": "SHA1NSEC3Digest",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 3645,
            "libraryName": {
              "contractScope": null,
              "id": 3643,
              "name": "Buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4208,
              "src": "287:6:17",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Buffer_$4208",
                "typeString": "library Buffer"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "281:31:17",
            "typeName": {
              "contractScope": null,
              "id": 3644,
              "name": "Buffer.buffer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3757,
              "src": "298:13:17",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_buffer_$3757_storage_ptr",
                "typeString": "struct Buffer.buffer"
              }
            }
          },
          {
            "body": {
              "id": 3748,
              "nodeType": "Block",
              "src": "423:500:17",
              "statements": [
                {
                  "assignments": [
                    3659
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3659,
                      "name": "buf",
                      "nodeType": "VariableDeclaration",
                      "scope": 3748,
                      "src": "433:24:17",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                        "typeString": "struct Buffer.buffer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3658,
                        "name": "Buffer.buffer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3757,
                        "src": "433:13:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_storage_ptr",
                          "typeString": "struct Buffer.buffer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3660,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "433:24:17"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3664,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3647,
                              "src": "476:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            "id": 3665,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "476:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3666,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3649,
                              "src": "490:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            "id": 3667,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "490:11:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "476:25:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "3136",
                          "id": 3669,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "504:2:17",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_16_by_1",
                            "typeString": "int_const 16"
                          },
                          "value": "16"
                        },
                        "src": "476:30:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3661,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3659,
                        "src": "467:3:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                          "typeString": "struct Buffer.buffer memory"
                        }
                      },
                      "id": 3663,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3792,
                      "src": "467:8:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_uint256_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                        "typeString": "function (struct Buffer.buffer memory,uint256) pure returns (struct Buffer.buffer memory)"
                      }
                    },
                    "id": 3671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "467:40:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                      "typeString": "struct Buffer.buffer memory"
                    }
                  },
                  "id": 3672,
                  "nodeType": "ExpressionStatement",
                  "src": "467:40:17"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3676,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3649,
                        "src": "529:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3673,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3659,
                        "src": "518:3:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                          "typeString": "struct Buffer.buffer memory"
                        }
                      },
                      "id": 3675,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "append",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3997,
                      "src": "518:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                        "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                      }
                    },
                    "id": 3677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "518:16:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                      "typeString": "struct Buffer.buffer memory"
                    }
                  },
                  "id": 3678,
                  "nodeType": "ExpressionStatement",
                  "src": "518:16:17"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3682,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3647,
                        "src": "555:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3679,
                        "name": "buf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3659,
                        "src": "544:3:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                          "typeString": "struct Buffer.buffer memory"
                        }
                      },
                      "id": 3681,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "append",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3997,
                      "src": "544:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                        "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                      }
                    },
                    "id": 3683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "544:16:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                      "typeString": "struct Buffer.buffer memory"
                    }
                  },
                  "id": 3684,
                  "nodeType": "ExpressionStatement",
                  "src": "544:16:17"
                },
                {
                  "assignments": [
                    3686
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3686,
                      "name": "h",
                      "nodeType": "VariableDeclaration",
                      "scope": 3748,
                      "src": "570:9:17",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 3685,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "570:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3692,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3689,
                          "name": "buf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3659,
                          "src": "592:3:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3690,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "buf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3754,
                        "src": "592:7:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3687,
                        "name": "SHA1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4224,
                        "src": "582:4:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SHA1_$4224_$",
                          "typeString": "type(library SHA1)"
                        }
                      },
                      "id": 3688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sha1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4223,
                      "src": "582:9:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                        "typeString": "function (bytes memory) pure returns (bytes20)"
                      }
                    },
                    "id": 3691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "582:18:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes20",
                      "typeString": "bytes20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "570:30:17"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3693,
                      "name": "iterations",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3651,
                      "src": "614:10:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 3694,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "627:1:17",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "614:14:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3743,
                  "nodeType": "IfStatement",
                  "src": "610:279:17",
                  "trueBody": {
                    "id": 3742,
                    "nodeType": "Block",
                    "src": "630:259:17",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3696,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3659,
                              "src": "644:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 3698,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "truncate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3871,
                            "src": "644:12:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 3699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "644:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3700,
                        "nodeType": "ExpressionStatement",
                        "src": "644:14:17"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3705,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "698:1:17",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "690:7:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes20_$",
                                  "typeString": "type(bytes20)"
                                },
                                "typeName": "bytes20"
                              },
                              "id": 3706,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "690:10:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes20",
                                "typeString": "bytes20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes20",
                                "typeString": "bytes20"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3701,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3659,
                              "src": "672:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 3703,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "appendBytes20",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4142,
                            "src": "672:17:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes20_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes20) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 3707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "672:29:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3708,
                        "nodeType": "ExpressionStatement",
                        "src": "672:29:17"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3712,
                              "name": "salt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3647,
                              "src": "726:4:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3709,
                              "name": "buf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3659,
                              "src": "715:3:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                "typeString": "struct Buffer.buffer memory"
                              }
                            },
                            "id": 3711,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3997,
                            "src": "715:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                              "typeString": "function (struct Buffer.buffer memory,bytes memory) pure returns (struct Buffer.buffer memory)"
                            }
                          },
                          "id": 3713,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "715:16:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                            "typeString": "struct Buffer.buffer memory"
                          }
                        },
                        "id": 3714,
                        "nodeType": "ExpressionStatement",
                        "src": "715:16:17"
                      },
                      {
                        "body": {
                          "id": 3740,
                          "nodeType": "Block",
                          "src": "784:95:17",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3728,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "819:1:17",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3729,
                                    "name": "h",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3686,
                                    "src": "822:1:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes20",
                                      "typeString": "bytes20"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3725,
                                    "name": "buf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3659,
                                    "src": "802:3:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                      "typeString": "struct Buffer.buffer memory"
                                    }
                                  },
                                  "id": 3727,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "writeBytes20",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4121,
                                  "src": "802:16:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_buffer_$3757_memory_ptr_$_t_uint256_$_t_bytes20_$returns$_t_struct$_buffer_$3757_memory_ptr_$bound_to$_t_struct$_buffer_$3757_memory_ptr_$",
                                    "typeString": "function (struct Buffer.buffer memory,uint256,bytes20) pure returns (struct Buffer.buffer memory)"
                                  }
                                },
                                "id": 3730,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "802:22:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                  "typeString": "struct Buffer.buffer memory"
                                }
                              },
                              "id": 3731,
                              "nodeType": "ExpressionStatement",
                              "src": "802:22:17"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3732,
                                  "name": "h",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3686,
                                  "src": "842:1:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 3735,
                                        "name": "buf",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3659,
                                        "src": "856:3:17",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_buffer_$3757_memory_ptr",
                                          "typeString": "struct Buffer.buffer memory"
                                        }
                                      },
                                      "id": 3736,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "buf",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3754,
                                      "src": "856:7:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 3733,
                                      "name": "SHA1",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4224,
                                      "src": "846:4:17",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SHA1_$4224_$",
                                        "typeString": "type(library SHA1)"
                                      }
                                    },
                                    "id": 3734,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sha1",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4223,
                                    "src": "846:9:17",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                                      "typeString": "function (bytes memory) pure returns (bytes20)"
                                    }
                                  },
                                  "id": 3737,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "846:18:17",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                },
                                "src": "842:22:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes20",
                                  "typeString": "bytes20"
                                }
                              },
                              "id": 3739,
                              "nodeType": "ExpressionStatement",
                              "src": "842:22:17"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3719,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3716,
                            "src": "763:1:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3720,
                            "name": "iterations",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3651,
                            "src": "767:10:17",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "763:14:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3741,
                        "initializationExpression": {
                          "assignments": [
                            3716
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 3716,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 3741,
                              "src": "751:6:17",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 3715,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "751:4:17",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 3718,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "760:1:17",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "751:10:17"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 3723,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "779:3:17",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 3722,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3716,
                              "src": "779:1:17",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3724,
                          "nodeType": "ExpressionStatement",
                          "src": "779:3:17"
                        },
                        "nodeType": "ForStatement",
                        "src": "746:133:17"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3745,
                        "name": "h",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3686,
                        "src": "914:1:17",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      ],
                      "id": 3744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "906:7:17",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": "bytes32"
                    },
                    "id": 3746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "906:10:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3655,
                  "id": 3747,
                  "nodeType": "Return",
                  "src": "899:17:17"
                }
              ]
            },
            "documentation": null,
            "id": 3749,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hash",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3652,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3647,
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "332:19:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3646,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "332:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3649,
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "353:19:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3648,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "353:5:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3651,
                  "name": "iterations",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "374:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3650,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "374:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "331:59:17"
            },
            "returnParameters": {
              "id": 3655,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3654,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3749,
                  "src": "414:7:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3653,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "414:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "413:9:17"
            },
            "scope": 3750,
            "src": "318:605:17",
            "stateMutability": "pure",
            "superFunction": 3634,
            "visibility": "external"
          }
        ],
        "scope": 3751,
        "src": "235:690:17"
      }
    ],
    "src": "0:926:17"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.14",
  "updatedAt": "2019-09-02T13:26:01.119Z",
  "devdoc": {
    "details": "Implements the DNSSEC iterated SHA1 digest used for NSEC3 records.",
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}