From 4e6f320667da4eebbadf283ad089386ce32e2448 Mon Sep 17 00:00:00 2001 From: Jordi Baylina Date: Tue, 25 Jun 2019 11:08:40 +0200 Subject: [PATCH] Optimization of the int_mul code --- build/groth16_wasm.js | 2 +- build/websnark.js | 2 +- example/index.html | 12 ++++- example/websnark.js | 2 +- src/build_int.js | 101 +++++++++++++++++++++++++++++++++++++++- src/build_test.js | 23 +++++++++ test/helpers/helpers.js | 25 ++++++++++ test/int.js | 84 +++++++++++++++++++++++++++++++++ test/tomcook.js | 59 +++++------------------ tools/buildwasm.js | 5 +- 10 files changed, 260 insertions(+), 55 deletions(-) create mode 100644 src/build_test.js create mode 100644 test/helpers/helpers.js create mode 100644 test/int.js diff --git a/build/groth16_wasm.js b/build/groth16_wasm.js index 7d0ac69..5c8d1b0 100644 --- a/build/groth16_wasm.js +++ b/build/groth16_wasm.js @@ -1,5 +1,5 @@ - exports.code = new Buffer("AGFzbQEAAAABPApgAn9/AGABfwBgAX8Bf2ACf38Bf2ADf39/AX9gA39/fwBgA39+fwBgAn9+AGAEf39/fwBgBX9/f39/AAIQAQNlbnYGbWVtb3J5AgDoBwNoZwABAgEDAwQEBQYHCAUFBQAABQAAAAEFBQAABQAAAAEFAAIBAAAFAAUAAAAIAQIAAgUICQgABQkDAAUFBQUAAgUFCAAIAgEBAAUFBQAAAAMAAgEAAAUABQAAAAgBAgACBQgJCAAFCQUHjAleCGludF9jb3B5AAAIaW50X3plcm8AAQdpbnRfb25lAAMKaW50X2lzWmVybwACBmludF9lcQAEB2ludF9ndGUABQdpbnRfYWRkAAYHaW50X3N1YgAHB2ludF9tdWwACAdpbnRfZGl2AAsOaW50X2ludmVyc2VNb2QADAdmMW1fYWRkAA0HZjFtX3N1YgAOB2YxbV9uZWcADwtmMW1fbVJlZHVjdAAQB2YxbV9tdWwAERJmMW1fZnJvbU1vbnRnb21lcnkAExBmMW1fdG9Nb250Z29tZXJ5ABILZjFtX2ludmVyc2UAFAhmMW1fY29weQAACGYxbV96ZXJvAAEKZjFtX2lzWmVybwACBmYxbV9lcQAEB2YxbV9vbmUAFQdmcm1fYWRkABYHZnJtX3N1YgAXB2ZybV9uZWcAGAtmcm1fbVJlZHVjdAAZB2ZybV9tdWwAGhJmcm1fZnJvbU1vbnRnb21lcnkAHBBmcm1fdG9Nb250Z29tZXJ5ABsLZnJtX2ludmVyc2UAHQhmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9vbmUAHgZmcl9hZGQAFgZmcl9zdWIAFwZmcl9uZWcAGAZmcl9tdWwAHwpmcl9pbnZlcnNlACAHZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUAHglmcl9pc1plcm8AAgVmcl9lcQAECWcxX2lzWmVybwAhB2cxX2NvcHkAIwdnMV96ZXJvACIJZzFfZG91YmxlACQGZzFfYWRkACUGZzFfbmVnACYGZzFfc3ViACcRZzFfZnJvbU1vbnRnb21lcnkAKA9nMV90b01vbnRnb21lcnkAKQlnMV9hZmZpbmUAKg5nMV90aW1lc1NjYWxhcgArC2cxX211bHRpZXhwADIMZzFfbXVsdGlleHAyADYHZmZ0X2ZmdAA/CGZmdF9pZmZ0AEARZmZ0X3RvTW9udGdvbWVyeU4APBNmZnRfZnJvbU1vbnRnb21lcnlOADsUZmZ0X2NvcHlOSW50ZXJsZWF2ZWQAOghmZnRfbXVsTgBBCHBvbF96ZXJvAEIPcG9sX2NvbnN0cnVjdExDAEMKZjJtX2lzWmVybwBECGYybV96ZXJvAEUHZjJtX29uZQBGCGYybV9jb3B5AEcHZjJtX211bABIB2YybV9hZGQASQdmMm1fc3ViAEoHZjJtX25lZwBLEmYybV9mcm9tTW9udGdvbWVyeQBNEGYybV90b01vbnRnb21lcnkATAZmMm1fZXEATgtmMm1faW52ZXJzZQBPCWcyX2lzWmVybwBQB2cyX2NvcHkAUgdnMl96ZXJvAFEJZzJfZG91YmxlAFMGZzJfYWRkAFQGZzJfbmVnAFUGZzJfc3ViAFYRZzJfZnJvbU1vbnRnb21lcnkAVw9nMl90b01vbnRnb21lcnkAWAlnMl9hZmZpbmUAWQ5nMl90aW1lc1NjYWxhcgBaC2cyX211bHRpZXhwAGEMZzJfbXVsdGlleHAyAGUJdGVzdEFkZEcxAGYKlXVnKgAgASAAKQMANwMAIAEgACkDCDcDCCABIAApAxA3AxAgASAAKQMYNwMYCx4AIABCADcDACAAQgA3AwggAEIANwMQIABCADcDGAszACAAKQMYUARAIAApAxBQBEAgACkDCFAEQCAAKQMAUA8FQQAPCwVBAA8LBUEADwtBAA8LHgAgAEIBNwMAIABCADcDCCAAQgA3AxAgAEIANwMYC0cAIAApAxggASkDGFEEQCAAKQMQIAEpAxBRBEAgACkDCCABKQMIUQRAIAApAwAgASkDAFEPBUEADwsFQQAPCwVBAA8LQQAPC30AIAApAxggASkDGFQEQEEADwUgACkDGCABKQMYVgRAQQEPBSAAKQMQIAEpAxBUBEBBAA8FIAApAxAgASkDEFYEQEEBDwUgACkDCCABKQMIVARAQQAPBSAAKQMIIAEpAwhWBEBBAQ8FIAApAwAgASkDAFoPCwsLCwsLQQAPC9QBAQF+IAA1AgAgATUCAHwhAyACIAM+AgAgADUCBCABNQIEfCADQiCIfCEDIAIgAz4CBCAANQIIIAE1Agh8IANCIIh8IQMgAiADPgIIIAA1AgwgATUCDHwgA0IgiHwhAyACIAM+AgwgADUCECABNQIQfCADQiCIfCEDIAIgAz4CECAANQIUIAE1AhR8IANCIIh8IQMgAiADPgIUIAA1AhggATUCGHwgA0IgiHwhAyACIAM+AhggADUCHCABNQIcfCADQiCIfCEDIAIgAz4CHCADQiCIpwuMAgEBfiAANQIAIAE1AgB9IQMgAiADQv////8Pgz4CACAANQIEIAE1AgR9IANCIId8IQMgAiADQv////8Pgz4CBCAANQIIIAE1Agh9IANCIId8IQMgAiADQv////8Pgz4CCCAANQIMIAE1Agx9IANCIId8IQMgAiADQv////8Pgz4CDCAANQIQIAE1AhB9IANCIId8IQMgAiADQv////8Pgz4CECAANQIUIAE1AhR9IANCIId8IQMgAiADQv////8Pgz4CFCAANQIYIAE1Ahh9IANCIId8IQMgAiADQv////8Pgz4CGCAANQIcIAE1Ahx9IANCIId8IQMgAiADQv////8Pgz4CHCADQiCHpwv0EAEBfkEoIAA1AgAgATUCAH43AwBBKCAANQIAIAE1AgR+NwMIQSggADUCACABNQIIfjcDEEEoIAA1AgAgATUCDH43AxhBKCAANQIAIAE1AhB+NwMgQSggADUCACABNQIUfjcDKEEoIAA1AgAgATUCGH43AzBBKCAANQIAIAE1Ahx+NwM4QSggADUCBCABNQIAfjcDQEEoIAA1AgQgATUCBH43A0hBKCAANQIEIAE1Agh+NwNQQSggADUCBCABNQIMfjcDWEEoIAA1AgQgATUCEH43A2BBKCAANQIEIAE1AhR+NwNoQSggADUCBCABNQIYfjcDcEEoIAA1AgQgATUCHH43A3hBKCAANQIIIAE1AgB+NwOAAUEoIAA1AgggATUCBH43A4gBQSggADUCCCABNQIIfjcDkAFBKCAANQIIIAE1Agx+NwOYAUEoIAA1AgggATUCEH43A6ABQSggADUCCCABNQIUfjcDqAFBKCAANQIIIAE1Ahh+NwOwAUEoIAA1AgggATUCHH43A7gBQSggADUCDCABNQIAfjcDwAFBKCAANQIMIAE1AgR+NwPIAUEoIAA1AgwgATUCCH43A9ABQSggADUCDCABNQIMfjcD2AFBKCAANQIMIAE1AhB+NwPgAUEoIAA1AgwgATUCFH43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fEHoBzUCGCAEfnwhAyAAIAM+AjAgADUCNCADQiCIfEHoBzUCHCAEfnwhAyAAIAM+AjRB6AggA0IgiD4CGEIAIQMgADUCHCACfkL/////D4MhBCAANQIcIANCIIh8QegHNQIAIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegHNQIEIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QegHNQIIIAR+fCEDIAAgAz4CJCAANQIoIANCIIh8QegHNQIMIAR+fCEDIAAgAz4CKCAANQIsIANCIIh8QegHNQIQIAR+fCEDIAAgAz4CLCAANQIwIANCIIh8QegHNQIUIAR+fCEDIAAgAz4CMCAANQI0IANCIIh8QegHNQIYIAR+fCEDIAAgAz4CNCAANQI4IANCIIh8QegHNQIcIAR+fCEDIAAgAz4COEHoCCADQiCIPgIcQegIIABBIGogARANCxIAIAAgAUHoDBAIQegMIAIQEAsLACAAQYgIIAEQEQsVACAAQagNEABByA0QAUGoDSABEBALFwAgACABEBMgAUHoByABEAwgASABEBILCQBBqAggABAACywAIAAgASACEAYEQCACQegNIAIQBxoFIAJB6A0QBQRAIAJB6A0gAhAHGgsLCxcAIAAgASACEAcEQCACQegNIAIQBhoLCxQAIAAQAkUEQEHoDSAAIAEQBxoLC5wRAwF+AX4BfkL/////DiECQgAhAyAANQIAIAJ+Qv////8PgyEEIAA1AgAgA0IgiHxB6A01AgAgBH58IQMgACADPgIAIAA1AgQgA0IgiHxB6A01AgQgBH58IQMgACADPgIEIAA1AgggA0IgiHxB6A01AgggBH58IQMgACADPgIIIAA1AgwgA0IgiHxB6A01AgwgBH58IQMgACADPgIMIAA1AhAgA0IgiHxB6A01AhAgBH58IQMgACADPgIQIAA1AhQgA0IgiHxB6A01AhQgBH58IQMgACADPgIUIAA1AhggA0IgiHxB6A01AhggBH58IQMgACADPgIYIAA1AhwgA0IgiHxB6A01AhwgBH58IQMgACADPgIcQegOIANCIIg+AgBCACEDIAA1AgQgAn5C/////w+DIQQgADUCBCADQiCIfEHoDTUCACAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHoDTUCBCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHoDTUCCCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHoDTUCDCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHoDTUCECAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHoDTUCFCAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHoDTUCGCAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AiBB6A4gA0IgiD4CBEIAIQMgADUCCCACfkL/////D4MhBCAANQIIIANCIIh8QegNNQIAIAR+fCEDIAAgAz4CCCAANQIMIANCIIh8QegNNQIEIAR+fCEDIAAgAz4CDCAANQIQIANCIIh8QegNNQIIIAR+fCEDIAAgAz4CECAANQIUIANCIIh8QegNNQIMIAR+fCEDIAAgAz4CFCAANQIYIANCIIh8QegNNQIQIAR+fCEDIAAgAz4CGCAANQIcIANCIIh8QegNNQIUIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegNNQIYIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QegNNQIcIAR+fCEDIAAgAz4CJEHoDiADQiCIPgIIQgAhAyAANQIMIAJ+Qv////8PgyEEIAA1AgwgA0IgiHxB6A01AgAgBH58IQMgACADPgIMIAA1AhAgA0IgiHxB6A01AgQgBH58IQMgACADPgIQIAA1AhQgA0IgiHxB6A01AgggBH58IQMgACADPgIUIAA1AhggA0IgiHxB6A01AgwgBH58IQMgACADPgIYIAA1AhwgA0IgiHxB6A01AhAgBH58IQMgACADPgIcIAA1AiAgA0IgiHxB6A01AhQgBH58IQMgACADPgIgIAA1AiQgA0IgiHxB6A01AhggBH58IQMgACADPgIkIAA1AiggA0IgiHxB6A01AhwgBH58IQMgACADPgIoQegOIANCIIg+AgxCACEDIAA1AhAgAn5C/////w+DIQQgADUCECADQiCIfEHoDTUCACAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHoDTUCBCAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHoDTUCCCAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHoDTUCDCAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHoDTUCECAEfnwhAyAAIAM+AiAgADUCJCADQiCIfEHoDTUCFCAEfnwhAyAAIAM+AiQgADUCKCADQiCIfEHoDTUCGCAEfnwhAyAAIAM+AiggADUCLCADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AixB6A4gA0IgiD4CEEIAIQMgADUCFCACfkL/////D4MhBCAANQIUIANCIIh8QegNNQIAIAR+fCEDIAAgAz4CFCAANQIYIANCIIh8QegNNQIEIAR+fCEDIAAgAz4CGCAANQIcIANCIIh8QegNNQIIIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegNNQIMIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QegNNQIQIAR+fCEDIAAgAz4CJCAANQIoIANCIIh8QegNNQIUIAR+fCEDIAAgAz4CKCAANQIsIANCIIh8QegNNQIYIAR+fCEDIAAgAz4CLCAANQIwIANCIIh8QegNNQIcIAR+fCEDIAAgAz4CMEHoDiADQiCIPgIUQgAhAyAANQIYIAJ+Qv////8PgyEEIAA1AhggA0IgiHxB6A01AgAgBH58IQMgACADPgIYIAA1AhwgA0IgiHxB6A01AgQgBH58IQMgACADPgIcIAA1AiAgA0IgiHxB6A01AgggBH58IQMgACADPgIgIAA1AiQgA0IgiHxB6A01AgwgBH58IQMgACADPgIkIAA1AiggA0IgiHxB6A01AhAgBH58IQMgACADPgIoIAA1AiwgA0IgiHxB6A01AhQgBH58IQMgACADPgIsIAA1AjAgA0IgiHxB6A01AhggBH58IQMgACADPgIwIAA1AjQgA0IgiHxB6A01AhwgBH58IQMgACADPgI0QegOIANCIIg+AhhCACEDIAA1AhwgAn5C/////w+DIQQgADUCHCADQiCIfEHoDTUCACAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHoDTUCBCAEfnwhAyAAIAM+AiAgADUCJCADQiCIfEHoDTUCCCAEfnwhAyAAIAM+AiQgADUCKCADQiCIfEHoDTUCDCAEfnwhAyAAIAM+AiggADUCLCADQiCIfEHoDTUCECAEfnwhAyAAIAM+AiwgADUCMCADQiCIfEHoDTUCFCAEfnwhAyAAIAM+AjAgADUCNCADQiCIfEHoDTUCGCAEfnwhAyAAIAM+AjQgADUCOCADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AjhB6A4gA0IgiD4CHEHoDiAAQSBqIAEQFgsSACAAIAFB6BIQCEHoEiACEBkLCwAgAEGIDiABEBoLFQAgAEGoExAAQcgTEAFBqBMgARAZCxcAIAAgARAcIAFB6A0gARAMIAEgARAbCwkAQagOIAAQAAsVACAAIAFB6BMQGkHoE0GIDiACEBoLCwAgAEHoDSABEAwLCgAgAEHAAGoQAgsVACAAEAEgAEEgahAVIABBwABqEAELIgAgACABEAAgAEEgaiABQSBqEAAgAEHAAGogAUHAAGoQAAuGAgAgABAhBEAgACABECMPCyAAIABBiBQQESAAQSBqIABBIGpBqBQQEUGoFEGoFEHIFBARIABBqBRB6BQQDUHoFEHoFEHoFBARQegUQYgUQegUEA5B6BRByBRB6BQQDkHoFEHoFEHoFBANQYgUQYgUQYgVEA1BiBVBiBRBiBUQDUGIFUGIFUGoFRARIABBIGogAEHAAGpByBUQEUHoFEHoFCABEA1BqBUgASABEA5ByBRByBRB6BUQDUHoFUHoFUHoFRANQegVQegVQegVEA1B6BQgASABQSBqEA4gAUEgakGIFSABQSBqEBEgAUEgakHoFSABQSBqEA5ByBVByBUgAUHAAGoQDQusAwIBfwF/IABBwABqIQMgAUHAAGohBCAAECEEQCABIAIQIw8LIAEQIQRAIAAgAhAjDwsgAyADQYgWEBEgBCAEQagWEBEgAEGoFkHIFhARIAFBiBZB6BYQESADQYgWQYgXEBEgBEGoFkGoFxARIABBIGpBqBdByBcQESABQSBqQYgXQegXEBFByBZB6BYQBARAQcgXQegXEAQEQCAAIAIQJA8LC0HoFkHIFkGIGBAOQegXQcgXQagYEA5BiBhBiBhByBgQDUHIGEHIGEHIGBARQYgYQcgYQegYEBFBqBhBqBhBiBkQDUHIFkHIGEHIGRARQYgZQYgZQagZEBFByBlByBlB6BkQDUGoGUHoGCACEA4gAkHoGSACEA5ByBdB6BhBiBoQEUGIGkGIGkGIGhANQcgZIAIgAkEgahAOIAJBIGpBiBkgAkEgahARIAJBIGpBiBogAkEgahAOIAMgBCACQcAAahANIAJBwABqIAJBwABqIAJBwABqEBEgAkHAAGpBiBYgAkHAAGoQDiACQcAAakGoFiACQcAAahAOIAJBwABqQYgYIAJBwABqEBELIgAgACABEAAgAEEgaiABQSBqEA8gAEHAAGogAUHAAGoQAAsQACABIAIQJiAAIAIgAhAlCyIAIAAgARATIABBIGogAUEgahATIABBwABqIAFBwABqEBMLIgAgACABEBIgAEEgaiABQSBqEBIgAEHAAGogAUHAAGoQEgtPACAAECEEQCABECIFIABBwABqQagaEBRBqBpBqBpByBoQEUGoGkHIGkHoGhARIABByBogARARIABBIGpB6BogAUEgahARIAFBwABqEBULC6cCAgF/AX8gAEGIGxAjIAMQIiACIQQCQANAIARBAWshBCABIARqLQAAIQUgAyADECQgBUGAAU8EQCAFQYABayEFQYgbIAMgAxAlCyADIAMQJCAFQcAATwRAIAVBwABrIQVBiBsgAyADECULIAMgAxAkIAVBIE8EQCAFQSBrIQVBiBsgAyADECULIAMgAxAkIAVBEE8EQCAFQRBrIQVBiBsgAyADECULIAMgAxAkIAVBCE8EQCAFQQhrIQVBiBsgAyADECULIAMgAxAkIAVBBE8EQCAFQQRrIQVBiBsgAyADECULIAMgAxAkIAVBAk8EQCAFQQJrIQVBiBsgAyADECULIAMgAxAkIAVBAU8EQCAFQQFrIQVBiBsgAyADECULIARFDQEMAAsLCysCAX8BfyAAQQV2QQJ0IQFBASAAQR9xdCECIAEgASgC6NsBIAJyNgLo2wELJAIBfwF/IABBBXZBAnQhAUEBIABBH3F0IQIgASgC6NsBIAJxC6ABBAF/AX8BfwF/IAAhAkHoGxAiQQAhBAJAA0AgBCABRg0BQegbQQEgBHRB4ABsaiEDIAIQAiEFIAIgAxAAIAJBIGohAiADQSBqIQMgAiADEAAgAkEgaiECIANBIGohAyAFBEAgAxABBSADEBULIARBAWohBAwACwtB6NsBQpeChIAQNwMAQfDbAUIBNwMAQfjbAUIBNwMAQYDcAUIANwMAC0ADAX8BfwF/QegbIABB4ABsaiEBIAAQLUUEQCAALQCI3AEQLyECIAAtAIjeARAvIQMgAiADIAEQJSAAECwLIAELpQEEAX8BfwF+AX5BACEDAkADQCADQSBGDQFCACEGQQAhBAJAA0AgBCABRg0BIAAgBEEgbCADamoxAAAhBSAFIAVCHIaEQo+AgIDwAYMhBSAF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CxQAIAAgARAAIABBIGogAUEgahAAC3kAIAAgAUHotwMQESAAQSBqIAFBIGpBiLgDEBEgACAAQSBqQai4AxANIAEgAUEgakHIuAMQDUGouANByLgDQai4AxARQYi4A0HItwMgAhARQei3AyACIAIQDUHotwNBiLgDIAJBIGoQDUGouAMgAkEgaiACQSBqEA4LGwAgACABIAIQDSAAQSBqIAFBIGogAkEgahANCxsAIAAgASACEA4gAEEgaiABQSBqIAJBIGoQDgsUACAAIAEQDyAAQSBqIAFBIGoQDwsUACAAIAEQEiAAQSBqIAFBIGoQEgsUACAAIAEQEyAAQSBqIAFBIGoQEwsVACAAIAEQBCAAQSBqIAFBIGoQBHELaAAgACAAQei4AxARIABBIGogAEEgakGIuQMQEUGIuQNByLcDQai5AxARQei4A0GouQNBqLkDEA5BqLkDQci5AxAUIABByLkDIAEQESAAQSBqQci5AyABQSBqEBEgAUEgaiABQSBqEA8LCgAgAEGAAWoQRAsWACAAEEUgAEHAAGoQRiAAQYABahBFCyQAIAAgARBHIABBwABqIAFBwABqEEcgAEGAAWogAUGAAWoQRwu8AgAgABBQBEAgACABEFIPCyAAIABB6LkDEEggAEHAAGogAEHAAGpBqLoDEEhBqLoDQai6A0HougMQSCAAQai6A0GouwMQSUGouwNBqLsDQai7AxBIQai7A0HouQNBqLsDEEpBqLsDQei6A0GouwMQSkGouwNBqLsDQai7AxBJQei5A0HouQNB6LsDEElB6LsDQei5A0HouwMQSUHouwNB6LsDQai8AxBIIABBwABqIABBgAFqQei8AxBIQai7A0GouwMgARBJQai8AyABIAEQSkHougNB6LoDQai9AxBJQai9A0GovQNBqL0DEElBqL0DQai9A0GovQMQSUGouwMgASABQcAAahBKIAFBwABqQei7AyABQcAAahBIIAFBwABqQai9AyABQcAAahBKQei8A0HovAMgAUGAAWoQSQvvAwIBfwF/IABBgAFqIQMgAUGAAWohBCAAEFAEQCABIAIQUg8LIAEQUARAIAAgAhBSDwsgAyADQei9AxBIIAQgBEGovgMQSCAAQai+A0HovgMQSCABQei9A0GovwMQSCADQei9A0HovwMQSCAEQai+A0GowAMQSCAAQcAAakGowANB6MADEEggAUHAAGpB6L8DQajBAxBIQei+A0GovwMQTgRAQejAA0GowQMQTgRAIAAgAhBTDwsLQai/A0HovgNB6MEDEEpBqMEDQejAA0GowgMQSkHowQNB6MEDQejCAxBJQejCA0HowgNB6MIDEEhB6MEDQejCA0GowwMQSEGowgNBqMIDQejDAxBJQei+A0HowgNB6MQDEEhB6MMDQejDA0GoxAMQSEHoxANB6MQDQajFAxBJQajEA0GowwMgAhBKIAJBqMUDIAIQSkHowANBqMMDQejFAxBIQejFA0HoxQNB6MUDEElB6MQDIAIgAkHAAGoQSiACQcAAakHowwMgAkHAAGoQSCACQcAAakHoxQMgAkHAAGoQSiADIAQgAkGAAWoQSSACQYABaiACQYABaiACQYABahBIIAJBgAFqQei9AyACQYABahBKIAJBgAFqQai+AyACQYABahBKIAJBgAFqQejBAyACQYABahBICyQAIAAgARBHIABBwABqIAFBwABqEEsgAEGAAWogAUGAAWoQRwsQACABIAIQVSAAIAIgAhBUCyQAIAAgARBNIABBwABqIAFBwABqEE0gAEGAAWogAUGAAWoQTQskACAAIAEQTCAAQcAAaiABQcAAahBMIABBgAFqIAFBgAFqEEwLWgAgABBQBEAgARBRBSAAQYABakGoxgMQT0GoxgNBqMYDQejGAxBIQajGA0HoxgNBqMcDEEggAEHoxgMgARBIIABBwABqQajHAyABQcAAahBIIAFBgAFqEEYLC7ACAgF/AX8gAEHoxwMQUiADEFEgAiEEAkADQCAEQQFrIQQgASAEai0AACEFIAMgAxBTIAVBgAFPBEAgBUGAAWshBUHoxwMgAyADEFQLIAMgAxBTIAVBwABPBEAgBUHAAGshBUHoxwMgAyADEFQLIAMgAxBTIAVBIE8EQCAFQSBrIQVB6McDIAMgAxBUCyADIAMQUyAFQRBPBEAgBUEQayEFQejHAyADIAMQVAsgAyADEFMgBUEITwRAIAVBCGshBUHoxwMgAyADEFQLIAMgAxBTIAVBBE8EQCAFQQRrIQVB6McDIAMgAxBUCyADIAMQUyAFQQJPBEAgBUECayEFQejHAyADIAMQVAsgAyADEFMgBUEBTwRAIAVBAWshBUHoxwMgAyADEFQLIARFDQEMAAsL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", "base64"); + exports.code = new Buffer("AGFzbQEAAAABPApgAn9/AGABfwBgAX8Bf2ACf38Bf2ADf39/AX9gA39/fwBgA39+fwBgAn9+AGAEf39/fwBgBX9/f39/AAIQAQNlbnYGbWVtb3J5AgDoBwNqaQABAgEDAwQEBQUGBwgFBQUAAAUAAAABBQUAAAUAAAABBQACAQAABQAFAAAACAECAAIFCAkIAAUJAwAFBQUFAAIFBQgACAIBAQAFBQUAAAADAAIBAAAFAAUAAAAIAQIAAgUICQgABQkICAeuCWAIaW50X2NvcHkAAAhpbnRfemVybwABB2ludF9vbmUAAwppbnRfaXNaZXJvAAIGaW50X2VxAAQHaW50X2d0ZQAFB2ludF9hZGQABgdpbnRfc3ViAAcKaW50X211bE9sZAAJB2ludF9tdWwACAdpbnRfZGl2AAwOaW50X2ludmVyc2VNb2QADQdmMW1fYWRkAA4HZjFtX3N1YgAPB2YxbV9uZWcAEAtmMW1fbVJlZHVjdAARB2YxbV9tdWwAEhJmMW1fZnJvbU1vbnRnb21lcnkAFBBmMW1fdG9Nb250Z29tZXJ5ABMLZjFtX2ludmVyc2UAFQhmMW1fY29weQAACGYxbV96ZXJvAAEKZjFtX2lzWmVybwACBmYxbV9lcQAEB2YxbV9vbmUAFgdmcm1fYWRkABcHZnJtX3N1YgAYB2ZybV9uZWcAGQtmcm1fbVJlZHVjdAAaB2ZybV9tdWwAGxJmcm1fZnJvbU1vbnRnb21lcnkAHRBmcm1fdG9Nb250Z29tZXJ5ABwLZnJtX2ludmVyc2UAHghmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9vbmUAHwZmcl9hZGQAFwZmcl9zdWIAGAZmcl9uZWcAGQZmcl9tdWwAIApmcl9pbnZlcnNlACEHZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUAHwlmcl9pc1plcm8AAgVmcl9lcQAECWcxX2lzWmVybwAiB2cxX2NvcHkAJAdnMV96ZXJvACMJZzFfZG91YmxlACUGZzFfYWRkACYGZzFfbmVnACcGZzFfc3ViACgRZzFfZnJvbU1vbnRnb21lcnkAKQ9nMV90b01vbnRnb21lcnkAKglnMV9hZmZpbmUAKw5nMV90aW1lc1NjYWxhcgAsC2cxX211bHRpZXhwADMMZzFfbXVsdGlleHAyADcHZmZ0X2ZmdABACGZmdF9pZmZ0AEERZmZ0X3RvTW9udGdvbWVyeU4APRNmZnRfZnJvbU1vbnRnb21lcnlOADwUZmZ0X2NvcHlOSW50ZXJsZWF2ZWQAOwhmZnRfbXVsTgBCCHBvbF96ZXJvAEMPcG9sX2NvbnN0cnVjdExDAEQKZjJtX2lzWmVybwBFCGYybV96ZXJvAEYHZjJtX29uZQBHCGYybV9jb3B5AEgHZjJtX211bABJB2YybV9hZGQASgdmMm1fc3ViAEsHZjJtX25lZwBMEmYybV9mcm9tTW9udGdvbWVyeQBOEGYybV90b01vbnRnb21lcnkATQZmMm1fZXEATwtmMm1faW52ZXJzZQBQCWcyX2lzWmVybwBRB2cyX2NvcHkAUwdnMl96ZXJvAFIJZzJfZG91YmxlAFQGZzJfYWRkAFUGZzJfbmVnAFYGZzJfc3ViAFcRZzJfZnJvbU1vbnRnb21lcnkAWA9nMl90b01vbnRnb21lcnkAWQlnMl9hZmZpbmUAWg5nMl90aW1lc1NjYWxhcgBbC2cyX211bHRpZXhwAGIMZzJfbXVsdGlleHAyAGYMdGVzdF9pbnRfbXVsAGcPdGVzdF9pbnRfbXVsT2xkAGgKx4UBaSoAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGAseACAAQgA3AwAgAEIANwMIIABCADcDECAAQgA3AxgLMwAgACkDGFAEQCAAKQMQUARAIAApAwhQBEAgACkDAFAPBUEADwsFQQAPCwVBAA8LQQAPCx4AIABCATcDACAAQgA3AwggAEIANwMQIABCADcDGAtHACAAKQMYIAEpAxhRBEAgACkDECABKQMQUQRAIAApAwggASkDCFEEQCAAKQMAIAEpAwBRDwVBAA8LBUEADwsFQQAPC0EADwt9ACAAKQMYIAEpAxhUBEBBAA8FIAApAxggASkDGFYEQEEBDwUgACkDECABKQMQVARAQQAPBSAAKQMQIAEpAxBWBEBBAQ8FIAApAwggASkDCFQEQEEADwUgACkDCCABKQMIVgRAQQEPBSAAKQMAIAEpAwBaDwsLCwsLC0EADwvUAQEBfiAANQIAIAE1AgB8IQMgAiADPgIAIAA1AgQgATUCBHwgA0IgiHwhAyACIAM+AgQgADUCCCABNQIIfCADQiCIfCEDIAIgAz4CCCAANQIMIAE1Agx8IANCIIh8IQMgAiADPgIMIAA1AhAgATUCEHwgA0IgiHwhAyACIAM+AhAgADUCFCABNQIUfCADQiCIfCEDIAIgAz4CFCAANQIYIAE1Ahh8IANCIIh8IQMgAiADPgIYIAA1AhwgATUCHHwgA0IgiHwhAyACIAM+AhwgA0IgiKcLjAIBAX4gADUCACABNQIAfSEDIAIgA0L/////D4M+AgAgADUCBCABNQIEfSADQiCHfCEDIAIgA0L/////D4M+AgQgADUCCCABNQIIfSADQiCHfCEDIAIgA0L/////D4M+AgggADUCDCABNQIMfSADQiCHfCEDIAIgA0L/////D4M+AgwgADUCECABNQIQfSADQiCHfCEDIAIgA0L/////D4M+AhAgADUCFCABNQIUfSADQiCHfCEDIAIgA0L/////D4M+AhQgADUCGCABNQIYfSADQiCHfCEDIAIgA0L/////D4M+AhggADUCHCABNQIcfSADQiCHfCEDIAIgA0L/////D4M+AhwgA0Igh6cLjxASAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IANC/////w+DIAA1AgAiBSABNQIAIgZ+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIAUgATUCBCIIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCBCIHIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgQgA0IgiCEEIANC/////w+DIAUgATUCCCIKfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIJIAZ+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIAUgATUCDCIMfnwhBCADIARCIIh8IQMgBEL/////D4MgByAKfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCILIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIAUgATUCECIOfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCECINIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhAgBEIgiCEDIARC/////w+DIAUgATUCFCIQfnwhBCADIARCIIh8IQMgBEL/////D4MgByAOfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIPIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DIAUgATUCGCISfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIRIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIARC/////w+DIAUgATUCHCIUfnwhBCADIARCIIh8IQMgBEL/////D4MgByASfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgESAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCHCITIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhwgA0IgiCEEIANC/////w+DIAcgFH58IQMgBCADQiCIfCEEIANC/////w+DIAkgEn58IQMgBCADQiCIfCEEIANC/////w+DIAsgEH58IQMgBCADQiCIfCEEIANC/////w+DIA0gDn58IQMgBCADQiCIfCEEIANC/////w+DIA8gDH58IQMgBCADQiCIfCEEIANC/////w+DIBEgCn58IQMgBCADQiCIfCEEIANC/////w+DIBMgCH58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgCSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgCyASfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgESAMfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAKfnwhBCADIARCIIh8IQMgAiAEPgIkIANCIIghBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCACIAM+AiggBEIgiCEDIARC/////w+DIA0gFH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gEn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgEH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgDn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgAiAEPgI8C/QQAQF+QSggADUCACABNQIAfjcDAEEoIAA1AgAgATUCBH43AwhBKCAANQIAIAE1Agh+NwMQQSggADUCACABNQIMfjcDGEEoIAA1AgAgATUCEH43AyBBKCAANQIAIAE1AhR+NwMoQSggADUCACABNQIYfjcDMEEoIAA1AgAgATUCHH43AzhBKCAANQIEIAE1AgB+NwNAQSggADUCBCABNQIEfjcDSEEoIAA1AgQgATUCCH43A1BBKCAANQIEIAE1Agx+NwNYQSggADUCBCABNQIQfjcDYEEoIAA1AgQgATUCFH43A2hBKCAANQIEIAE1Ahh+NwNwQSggADUCBCABNQIcfjcDeEEoIAA1AgggATUCAH43A4ABQSggADUCCCABNQIEfjcDiAFBKCAANQIIIAE1Agh+NwOQAUEoIAA1AgggATUCDH43A5gBQSggADUCCCABNQIQfjcDoAFBKCAANQIIIAE1AhR+NwOoAUEoIAA1AgggATUCGH43A7ABQSggADUCCCABNQIcfjcDuAFBKCAANQIMIAE1AgB+NwPAAUEoIAA1AgwgATUCBH43A8gBQSggADUCDCABNQIIfjcD0AFBKCAANQIMIAE1Agx+NwPYAUEoIAA1AgwgATUCEH43A+ABQSggADUCDCABNQIUfjcD6AFBKCAANQIMIAE1Ahh+NwPwAUEoIAA1AgwgATUCHH43A/gBQSggADUCECABNQIAfjcDgAJBKCAANQIQIAE1AgR+NwOIAkEoIAA1AhAgATUCCH43A5ACQSggADUCECABNQIMfjcDmAJBKCAANQIQIAE1AhB+NwOgAkEoIAA1AhAgATUCFH43A6gCQSggADUCECABNQIYfjcDsAJBKCAANQIQIAE1Ahx+NwO4AkEoIAA1AhQgATUCAH43A8ACQSggADUCFCABNQIEfjcDyAJBKCAANQIUIAE1Agh+NwPQAkEoIAA1AhQgATUCDH43A9gCQSggADUCFCABNQIQfjcD4AJBKCAANQIUIAE1AhR+NwPoAkEoIAA1AhQgATUCGH43A/ACQSggADUCFCABNQIcfjcD+AJBKCAANQIYIAE1AgB+NwOAA0EoIAA1AhggATUCBH43A4gDQSggADUCGCABNQIIfjcDkANBKCAANQIYIAE1Agx+NwOYA0EoIAA1AhggATUCEH43A6ADQSggADUCGCABNQIUfjcDqANBKCAANQIYIAE1Ahh+NwOwA0EoIAA1AhggATUCHH43A7gDQSggADUCHCABNQIAfjcDwANBKCAANQIcIAE1AgR+NwPIA0EoIAA1AhwgATUCCH43A9ADQSggADUCHCABNQIMfjcD2ANBKCAANQIcIAE1AhB+NwPgA0EoIAA1AhwgATUCFH43A+gDQSggADUCHCABNQIYfjcD8ANBKCAANQIcIAE1Ahx+NwP4AyADQiCIQSg1AgB8IQMgAiAD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IAM+AjAgADUCNCADQiCIfEHoDTUCHCAEfnwhAyAAIAM+AjRB6A4gA0IgiD4CGEIAIQMgADUCHCACfkL/////D4MhBCAANQIcIANCIIh8QegNNQIAIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QegNNQIEIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QegNNQIIIAR+fCEDIAAgAz4CJCAANQIoIANCIIh8QegNNQIMIAR+fCEDIAAgAz4CKCAANQIsIANCIIh8QegNNQIQIAR+fCEDIAAgAz4CLCAANQIwIANCIIh8QegNNQIUIAR+fCEDIAAgAz4CMCAANQI0IANCIIh8QegNNQIYIAR+fCEDIAAgAz4CNCAANQI4IANCIIh8QegNNQIcIAR+fCEDIAAgAz4COEHoDiADQiCIPgIcQegOIABBIGogARAXCxIAIAAgAUHoEhAIQegSIAIQGgsLACAAQYgOIAEQGwsVACAAQagTEABByBMQAUGoEyABEBoLFwAgACABEB0gAUHoDSABEA0gASABEBwLCQBBqA4gABAACxUAIAAgAUHoExAbQegTQYgOIAIQGwsLACAAQegNIAEQDQsKACAAQcAAahACCxUAIAAQASAAQSBqEBYgAEHAAGoQAQsiACAAIAEQACAAQSBqIAFBIGoQACAAQcAAaiABQcAAahAAC4YCACAAECIEQCAAIAEQJA8LIAAgAEGIFBASIABBIGogAEEgakGoFBASQagUQagUQcgUEBIgAEGoFEHoFBAOQegUQegUQegUEBJB6BRBiBRB6BQQD0HoFEHIFEHoFBAPQegUQegUQegUEA5BiBRBiBRBiBUQDkGIFUGIFEGIFRAOQYgVQYgVQagVEBIgAEEgaiAAQcAAakHIFRASQegUQegUIAEQDkGoFSABIAEQD0HIFEHIFEHoFRAOQegVQegVQegVEA5B6BVB6BVB6BUQDkHoFCABIAFBIGoQDyABQSBqQYgVIAFBIGoQEiABQSBqQegVIAFBIGoQD0HIFUHIFSABQcAAahAOC6wDAgF/AX8gAEHAAGohAyABQcAAaiEEIAAQIgRAIAEgAhAkDwsgARAiBEAgACACECQPCyADIANBiBYQEiAEIARBqBYQEiAAQagWQcgWEBIgAUGIFkHoFhASIANBiBZBiBcQEiAEQagWQagXEBIgAEEgakGo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AX8gACEEIAEhBSADIQYgACACQSBsaiEHAkADQCAEIAdGDQEgBCAFIAYQGyAEQSBqIQQgBUEgaiEFIAZBIGohBgwACwsLLgIBfwF/IAAhAyAAIAFBIGxqIQICQANAIAMgAkYNASADEAEgA0EgaiEDDAALCwuOAQYBfwF/AX8BfwF/AX9BACEEIAAhBiABIQcCQANAIAQgAkYNASAGKAIAIQkgBkEEaiEGQQAhBQJAA0AgBSAJRg0BIAMgBigCAEEgbGohCCAGQQRqIQYgByAGQai3AxAbQai3AyAIIAgQFyAGQSBqIQYgBUEBaiEFDAALCyAHQSBqIQcgBEEBaiEEDAALCwsOACAAEAIgAEEgahACcQsNACAAEAEgAEEgahABCw0AIAAQFiAAQSBqEAELFAAgACABEAAgAEEgaiABQSBqEAALeQAgACABQei3AxASIABBIGogAUEgakGIuAMQEiAAIABBIGpBqLgDEA4gASABQSBqQci4AxAOQai4A0HIuANBqLgDEBJBiLgDQci3AyACEBJB6LcDIAIgAhAOQei3A0GIuAMgAkEgahAOQai4AyACQSBqIAJBIGoQDwsbACAAIAEgAhAOIABBIGogAUEgaiACQSBqEA4LGwAgACABIAIQDyAAQSBqIAFBIGogAkEgahAPCxQAIAAgARAQIABBIGogAUEgahAQCxQAIAAgARATIABBIGogAUEgahATCxQAIAAgARAUIABBIGogAUEgahAUCxUAIAAgARAEIABBIGogAUEgahAEcQtoACAAIABB6LgDEBIgAEEgaiAAQSBqQYi5AxASQYi5A0HItwNBqLkDEBJB6LgDQai5A0GouQMQD0GouQNByLkDEBUgAEHIuQMgARASIABBIGpByLkDIAFBIGoQEiABQSBqIAFBIGoQEAsKACAAQYABahBFCxYAIAAQRiAAQcAAahBHIABBgAFqEEYLJAAgACABEEggAEHAAGogAUHAAGoQSCAAQYABaiABQYABahBIC7wCACAAEFEEQCAAIAEQUw8LIAAgAEHouQMQSSAAQcAAaiAAQcAAakGougMQSUGougNBqLoDQei6AxBJIABBqLoDQai7AxBKQai7A0GouwNBqLsDEElBqLsDQei5A0GouwMQS0GouwNB6LoDQai7AxBLQai7A0GouwNBqLsDEEpB6LkDQei5A0HouwMQSkHouwNB6LkDQei7AxBKQei7A0HouwNBqLwDEEkgAEHAAGogAEGAAWpB6LwDEElBqLsDQai7AyABEEpBqLwDIAEgARBLQei6A0HougNBqL0DEEpBqL0DQai9A0GovQMQSkGovQNBqL0DQai9AxBKQai7AyABIAFBwABqEEsgAUHAAGpB6LsDIAFBwABqEEkgAUHAAGpBqL0DIAFBwABqEEtB6LwDQei8AyABQYABahBKC+8DAgF/AX8gAEGAAWohAyABQYABaiEEIAAQUQRAIAEgAhBTDwsgARBRBEAgACACEFMPCyADIANB6L0DEEkgBCAEQai+AxBJIABBqL4DQei+AxBJIAFB6L0DQai/AxBJIANB6L0DQei/AxBJIARBqL4DQajAAxBJIABBwABqQajAA0HowAMQSSABQcAAakHovwNBqMEDEElB6L4DQai/AxBPBEBB6MADQajBAxBPBEAgACACEFQPCwtBqL8DQei+A0HowQMQS0GowQNB6MADQajCAxBLQejBA0HowQNB6MIDEEpB6MIDQejCA0HowgMQSUHowQNB6MIDQajDAxBJQajCA0GowgNB6MMDEEpB6L4DQejCA0HoxAMQSUHowwNB6MMDQajEAxBJQejEA0HoxANBqMUDEEpBqMQDQajDAyACEEsgAkGoxQMgAhBLQejAA0GowwNB6MUDEElB6MUDQejFA0HoxQMQSkHoxAMgAiACQcAAahBLIAJBwABqQejDAyACQcAAahBJIAJBwABqQejFAyACQcAAahBLIAMgBCACQYABahBKIAJBgAFqIAJBgAFqIAJBgAFqEEkgAkGAAWpB6L0DIAJBgAFqEEsgAkGAAWpBqL4DIAJBgAFqEEsgAkGAAWpB6MEDIAJBgAFqEEkLJAAgACABEEggAEHAAGogAUHAAGoQTCAAQYABaiABQYABahBICxAAIAEgAhBWIAAgAiACEFULJAAgACABEE4gAEHAAGogAUHAAGoQTiAAQYABaiABQYABahBOCyQAIAAgARBNIABBwABqIAFBwABqEE0gAEGAAWogAUGAAWoQTQtaACAAEFEEQCABEFIFIABBgAFqQajGAxBQQajGA0GoxgNB6MYDEElBqMYDQejGA0GoxwMQSSAAQejGAyABEEkgAEHAAGpBqMcDIAFBwABqEEkgAUGAAWoQRwsLsAIC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", "base64"); exports.pq = 1000; exports.pr = 1768; \ No newline at end of file diff --git a/build/websnark.js b/build/websnark.js index da2d1c9..e82c6cb 100644 --- a/build/websnark.js +++ b/build/websnark.js @@ -1,7 +1,7 @@ (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i0) { + res.push( bigInt.one.shiftLeft(bitsPerWord*i).minus(1)); + } + if (i { + let pbInt; + + before(async () => { + pbInt = await buildProtoboard((module) => { + buildInt(module, 4); + buildTest(module, "int_mul"); + buildTest(module, "int_mulOld"); + }, 32); + }); + + it("It should do a basic multiplication", async () => { + let c; + const pA = pbInt.alloc(); + const pB = pbInt.alloc(); + const pC = pbInt.alloc(64); + + const values = helpers.genValues(8, false); + + for (let i=0; i { + + const pA = pbInt.alloc(); + const pB = pbInt.alloc(); + const pC = pbInt.alloc(64); + + let start, end, time; + + const A = bigInt.one.shiftLeft(256).minus(1); + const B = bigInt.one.shiftLeft(256).minus(1); + + pbInt.set(pA, A); + pbInt.set(pB, B); + + start = new Date().getTime(); + pbInt.test_int_mul(pA, pB, pC, 50000000); + end = new Date().getTime(); + time = end - start; + + const c1 = pbInt.get(pC, 1, 64); + assert(c1.equals(A.times(B))); + + console.log("Mul Time (ms): " + time); + + start = new Date().getTime(); + pbInt.test_int_mulOld(pA, pB, pC, 50000000); + end = new Date().getTime(); + time = end - start; + + const c2 = pbInt.get(pC, 1, 64); + assert(c2.equals(A.times(B))); + + console.log("Mul Old Time (ms): " + time); + + }).timeout(10000000); + +}); diff --git a/test/tomcook.js b/test/tomcook.js index adb438d..0a6cff2 100644 --- a/test/tomcook.js +++ b/test/tomcook.js @@ -4,49 +4,11 @@ const bigInt = require("big-integer"); const buildProtoboard = require("../src/protoboard.js"); const buildTomCook = require("../src/build_tomcook.js"); const buildInt = require("../src/build_int.js"); +const buildTest = require("../src/build_test.js"); + +const helpers = require("./helpers/helpers.js"); -function buildTest(module, fn) { - const f = module.addFunction("test_"+fn); - f.addParam("x", "i32"); - f.addParam("y", "i32"); - f.addParam("r", "i32"); - f.addParam("n", "i32"); - f.addLocal("i", "i32"); - - const c = f.getCodeBuilder(); - - f.addCode(c.setLocal("i", c.getLocal("n"))); - f.addCode(c.block(c.loop( - c.call(fn, c.getLocal("x"), c.getLocal("y"), c.getLocal("r")), - c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))), - c.br_if(1, c.i32_eqz ( c.getLocal("i") )), - c.br(0) - ))); - - module.exportFunction("test_"+fn); -} - -function genValues(n, neg) { - const res = []; - res.push(bigInt.zero); - for (let i=0; i0) { - res.push( bigInt.one.shiftLeft(29*i).minus(1)); - } - if (i<8) { - res.push( bigInt.one.shiftLeft(29*i)); - res.push( bigInt.one.shiftLeft(29*i).add(1)); - } - } - - if (neg) { - const nt= res.length; - for (let i=0; i { let pbTC; @@ -67,7 +29,7 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { let c; const pA = pbTC.alloc(6*4); - const values = genValues(6, true); + const values = helpers.genValues(6, true, 29); for (let i=0; i { let c; const pA = pbTC.alloc(6*4); - const values = genValues(6, true); + const values = helpers.genValues(6, true, 29); for (let i=0; i { let c; const pA = pbTC.alloc(6*4); - const values = genValues(6, true); + const values = helpers.genValues(6, true, 29); for (let i=0; i { const pB = pbTC.alloc(); const pC = pbTC.alloc(24); - const values = genValues(3, true); + const values = helpers.genValues(3, true, 29); for (let i=0; i { const pB = pbTC.alloc(9*4); const pC = pbTC.alloc(9*4*2); - const values = genValues(9, false); + const values = helpers.genValues(9, false, 29); for (let i=0; i { } }); + it("It should profile school", async () => { const A = bigInt.one.shiftLeft(254).minus(1); const B = bigInt.one.shiftLeft(254).minus(1); @@ -195,7 +158,7 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { const pC = pbInt.alloc(64); const start = new Date().getTime(); - pbInt.test_int_mul(pA, pB, pC, 100000000); + pbInt.test_int_mul(pA, pB, pC, 10000000); const end = new Date().getTime(); const time = end - start; @@ -225,7 +188,7 @@ describe("Basic tests for Tom Cook Multiplication Strategy", () => { // console.log("Mul1 Tom Cook Time (ms): " + time); start = new Date().getTime(); - pbTC.test_tomcook_mul9(pA, pB, pC, 100000000); + pbTC.test_tomcook_mul9(pA, pB, pC, 10000000); end = new Date().getTime(); time = end - start; diff --git a/tools/buildwasm.js b/tools/buildwasm.js index 69e7306..83032f9 100644 --- a/tools/buildwasm.js +++ b/tools/buildwasm.js @@ -4,10 +4,10 @@ const buildF1m = require("../src/build_f1m.js"); const buildF2m = require("../src/build_f2m.js"); const buildF1 = require("../src/build_f1.js"); const buildCurve = require("../src/build_curve.js"); -const buildTest = require("../src/build_testg1"); const buildFFT = require("../src/build_fft"); const buildMultiexp = require("../src/build_multiexp"); const buildPol = require("../src/build_pol"); +const buildTest = require("../src/build_test"); const utils = require("../src/utils"); const fs = require("fs"); const path = require("path"); @@ -37,7 +37,8 @@ function buildWasm() { buildCurve(moduleBuilder, "g2", "f2m"); buildMultiexp(moduleBuilder, "g2", "g2", "f2m", "fr"); - buildTest(moduleBuilder); + buildTest(moduleBuilder, "int_mul"); + buildTest(moduleBuilder, "int_mulOld"); const code = moduleBuilder.build();